广告位联系
返回顶部
分享到

javascript实现create的方法

JavaScript 来源:互联网搜集 作者:秩名 发布时间:2019-11-04 19:54:01 人浏览
摘要

1. 背景 项目使用 easyui + jquery作为前端框架,之前基本上是些后端代码设计,前端涉略仅限于应用。 项目js是之前部门领导写的一个框架,使用面向过程方法进行编码,前端代码耦合较深,修改起来捉襟见肘。 希望以统一方式对jquery代码进行设计管理,有必要

1. 背景

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

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

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

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

2. 实现



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



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


 

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);


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://www.cnblogs.com/hexx/p/11792135.html
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计