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 相关文章推荐
(function(){})()的用法与优点
Mar 11 Javascript
可以把编码转换成 gb2312编码lib.UTF8toGB2312.js
Aug 21 Javascript
javascript下对于事件、事件流、事件触发的顺序随便说说
Jul 17 Javascript
javascript动态改变img的src属性图片不显示的解决方法
Oct 20 Javascript
javascript 学习笔记(一)DOM基本操作
Apr 08 Javascript
AngularJS基础学习笔记之指令
May 10 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
Jun 14 Javascript
基于jquery实现的鼠标悬停提示案例
Dec 11 Javascript
详解vue2路由vue-router配置(懒加载)
Apr 08 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
Feb 11 Javascript
vue下的@change事件的实现
Oct 25 Javascript
js实现微信聊天界面
Aug 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判断GIF图片是否为动画的方法
2020/09/04 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
PHP实现在线阅读PDF文件的方法
2015/06/17 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
php+ajax实现仿百度查询下拉内容功能示例
2017/10/20 PHP
php命名空间设计思想、用法与缺点分析
2019/07/17 PHP
JS 树形递归实例代码
2010/05/18 Javascript
Whatever:hover 无需javascript让IE支持丰富伪类
2010/06/29 Javascript
javascript匿名函数应用示例介绍
2014/03/07 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
2017/04/13 Javascript
node.js中express-session配置项详解
2017/05/31 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
vue中使用ueditor富文本编辑器
2018/02/08 Javascript
Vue实现PopupWindow组件详解
2018/04/28 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
Vue路由钩子之afterEach beforeEach的区别详解
2018/07/15 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
使用Promise封装小程序wx.request的实现方法
2019/11/13 Javascript
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
python实现的守护进程(Daemon)用法实例
2015/06/02 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
2020/03/10 Python
Furla官网:意大利著名的皮革品牌
2019/08/06 全球购物
优秀英语专业毕业生求职信
2013/11/23 职场文书
出生医学证明样本
2014/01/17 职场文书
校园学雷锋广播稿
2014/10/08 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
2014年优秀党员材料
2014/12/18 职场文书
企业百日安全活动总结
2015/05/07 职场文书
Redis IP地址的绑定的实现
2021/05/08 Redis
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android
星际争霸:毕姥爷vs解冻03
2022/04/01 星际争霸
vue递归实现树形组件
2022/07/15 Vue.js