javascript如何实现create方法


Posted in Javascript onNovember 04, 2019

这篇文章主要介绍了javascript如何实现create方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1. 背景

项目使用 easyui + jquery作为前端框架,之前基本上是些后端代码设计,前端涉略仅限于应用。

项目js是之前部门领导写的一个框架,使用面向过程方法进行编码,前端代码耦合较深,修改起来捉襟见肘。

希望以统一方式对jquery代码进行设计管理,有必要对jquery源码有一定程度了解。

理解代码最好的方式,本人感觉应该是造简化版轮子。大致理解原型链之后,本文参考引用博文时限一个create函数。

2. 实现

javascript如何实现create方法

构造函数的constructor属性在声明以后自动赋值为自身,同时People的__proto__属性赋值为Function.prototype。

javascript如何实现create方法

使用new方式和Function.call方式创建的对象在原型上存在区分。

javascript如何实现create方法

new方式对象__proto__属性指向其构造函数prototype对象,Function.call方式对象__proto__属性指向Object的prototype对象。

因此Function.call()方式创建对象只要修改__proto__属性指向,私认为等价于new方式创建对象,代码如下。

function create(){
  // 1. 创建一个空对象
  let obj = {};
  
  // 2. 获取构造函数
  let constructor = [].shift.call(arguments);

  // 3. 链接到原型
  obj.__proto__ = constructor.prototype;

  // 4. 绑定this值
  let result = constructor.apply(obj, arguments);

  // 5. 返回新对象
  return typeof result==='object' ? result : obj;
}

调用方式为

var people = create(People,'Bob',22);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 哈希表(hashtable)的简单实现
Jan 20 Javascript
javascript怎么禁用浏览器后退按钮
Mar 27 Javascript
纯js和css实现渐变色包括静态渐变和动态渐变
May 29 Javascript
JavaScript中的getDay()方法使用详解
Jun 09 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
Apr 24 Javascript
微信小程序实现tab切换效果
Nov 21 Javascript
JS 使用 window对象的print方法实现分页打印功能
May 16 Javascript
AngularJS与后端php的数据交互方法
Aug 13 Javascript
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
Aug 24 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
Dec 14 Javascript
VUE 实现复制内容到剪贴板的两种方法
Apr 24 Javascript
js实现无缝轮播图特效
May 09 Javascript
关于vue里页面的缓存详解
Nov 04 #Javascript
vue2.0 获取从http接口中获取数据,组件开发,路由配置方式
Nov 04 #Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
Nov 04 #Javascript
vue实现权限控制路由(vue-router 动态添加路由)
Nov 04 #Javascript
Vue路由对象属性 .meta $route.matched详解
Nov 04 #Javascript
element-ui table组件如何使用render属性的实现
Nov 04 #Javascript
Vue 解决多级动态面包屑导航的问题
Nov 04 #Javascript
You might like
PHP读取目录树的实现方法分析
2019/03/22 PHP
7个有用的jQuery代码片段分享
2015/05/19 Javascript
jquery使用经验小结
2015/05/20 Javascript
JavaScript取得键盘按下方向键是哪个的方法
2015/08/04 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
Jquery判断form表单数据是否变化
2016/03/30 Javascript
浅谈JavaScript 浏览器对象
2016/06/03 Javascript
jQuery简单创建节点的方法
2016/09/09 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
2020/11/26 Vue.js
Python匹配中文的正则表达式
2016/05/11 Python
Python正则表达式使用范例分享
2016/12/04 Python
使用Python的Scrapy框架十分钟爬取美女图
2016/12/26 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
Python决策树和随机森林算法实例详解
2018/01/30 Python
Python实现的用户登录系统功能示例
2018/02/05 Python
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
Python二叉树的镜像转换实现方法示例
2019/03/06 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
Python CSS选择器爬取京东网商品信息过程解析
2020/06/01 Python
HTML5 Web缓存和运用程序缓存(cookie,session)
2018/01/11 HTML / CSS
Stuart Weitzman欧盟:美国奢华鞋履品牌
2017/05/24 全球购物
英国最大的邮寄种子和植物公司:Thompson & Morgan
2017/09/21 全球购物
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
WoolOvers澳洲官方网站:英国针织服装公司
2018/05/13 全球购物
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
球队口号
2014/06/18 职场文书
模具设计与制造专业自荐书
2014/07/01 职场文书
受资助学生感谢信
2015/01/21 职场文书
活动经费申请报告
2015/05/15 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
学历证明范文
2015/06/16 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python
使用@Value值注入及配置文件组件扫描
2021/07/09 Java/Android