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 vvorld 在线加密破解方法
Nov 13 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
Jun 20 Javascript
js点击更换背景颜色或图片的实例代码
Jun 25 Javascript
动态读取JSON解析键值对的方法
Jun 03 Javascript
图解js图片轮播效果
Dec 20 Javascript
JS实现列表的响应式排版(推荐)
Sep 01 Javascript
Angular JS 生成动态二维码的方法
Feb 23 Javascript
ng-alain表单使用方式详解
Jul 10 Javascript
Vue的watch和computed方法的使用及区别介绍
Sep 06 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
Sep 07 Javascript
微信小程序Echarts图表组件使用方法详解
Jun 25 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
Aug 12 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视频拍照上传头像功能实现代码分享
2015/10/08 PHP
PHP-FPM的配置与优化讲解
2019/03/15 PHP
将Datatable转化成json发送前台实现思路
2013/09/06 Javascript
jQuery 计算iframe 窗口大小的方法
2014/05/13 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
2015/04/24 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
2015/12/02 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
javascript 中的事件委托详解
2016/10/25 Javascript
Bootstrap导航条的使用和理解3
2016/12/14 Javascript
谈谈JS中常遇到的浏览器兼容问题和解决方法
2016/12/17 Javascript
Bootstrap Table 搜索框和查询功能
2017/11/30 Javascript
setTimeout与setInterval的区别浅析
2019/03/23 Javascript
使用 vue 实现灭霸打响指英雄消失的效果附demo
2019/05/06 Javascript
java实现单链表增删改查的实例代码详解
2019/08/30 Javascript
vue+elementUI组件table实现前端分页功能
2020/11/15 Javascript
JavaScript代码模拟鼠标自动点击事件示例
2020/08/07 Javascript
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
[43:03]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
python去除所有html标签的方法
2015/05/05 Python
深入理解python中的select模块
2017/04/23 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
2017/07/11 Python
python频繁写入文件时提速的方法
2019/06/26 Python
基于python判断字符串括号是否闭合{}[]()
2020/09/21 Python
英国最大的奢侈珠宝和手表网站:C W Sellors
2017/02/10 全球购物
法国房车租赁网站:Yescapa
2019/08/26 全球购物
计算s=f(f(-1.4))的值
2014/05/06 面试题
Solaris操作系统的线程机制
2015/07/28 面试题
物流专业大学应届生求职信
2013/11/03 职场文书
作风建设演讲稿
2014/05/23 职场文书
2015年母亲节活动总结
2015/02/10 职场文书
中学生逃课检讨书
2015/02/17 职场文书
观后感开头
2015/06/19 职场文书
个人职业生涯规划之自我评估篇
2019/09/03 职场文书
mysql分组后合并显示一个字段的多条数据方式
2022/01/22 MySQL
Nginx速查手册及常见问题
2022/04/07 Servers