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 相关文章推荐
简单三步,搞掂内存泄漏
Mar 10 Javascript
javascript学习笔记(十) js对象 继承
Jun 19 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
Jan 23 Javascript
jQuery显示和隐藏 常用的状态判断方法
Jan 29 Javascript
JQuery控制Radio选中方法分析
May 29 Javascript
javascript每日必学之循环
Feb 19 Javascript
Bootstrap源码解读按钮(5)
Dec 23 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
Feb 10 Javascript
vue 详情跳转至列表页实现列表页缓存
Mar 27 Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
May 08 Javascript
JavaScript的垃圾回收机制与内存管理
Aug 06 Javascript
微信小程序实现自定义底部导航
Nov 18 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
Apache设置虚拟WEB
2006/10/09 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
PHP连接数据库实现注册页面的增删改查操作
2016/03/27 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
2018/01/16 PHP
Laravel框架验证码类用法实例分析
2019/09/11 PHP
Aster vs KG BO3 第一场2.18
2021/03/10 DOTA
Javascript 代码也可以变得优美的实现方法
2009/06/22 Javascript
jquery的index方法实现tab效果
2011/02/16 Javascript
jquery tab插件精简版分享
2011/09/10 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
JavaScript闭包实例讲解
2014/04/22 Javascript
一段非常简单的js判断浏览器的内核
2014/08/17 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
解决webpack打包速度慢的解决办法汇总
2017/07/06 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
JavaScript写个贪吃蛇小游戏(超详细)
2020/03/17 Javascript
解决vue初始化项目一直停在downloading template的问题
2020/11/09 Javascript
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
Python编写生成验证码的脚本的教程
2015/05/04 Python
新手常见6种的python报错及解决方法
2018/03/09 Python
详解python中的hashlib模块的使用
2019/04/22 Python
python中metaclass原理与用法详解
2019/06/25 Python
Django 创建新App及其常用命令的实现方法
2019/08/04 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
python中封包建立过程实例
2021/02/18 Python
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
大学生关于奋斗的演讲稿
2014/01/09 职场文书
超市采购员岗位职责
2014/02/01 职场文书
就业推荐表自我鉴定
2014/03/21 职场文书
捐助倡议书范文
2014/04/15 职场文书
四年级学生期末评语
2014/12/26 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
离职信范本
2015/06/23 职场文书
Github 使用python对copilot做些简单使用测试
2022/04/14 Python