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 相关文章推荐
基于JQuery的抓取博客园首页RSS的代码
Dec 01 Javascript
jQuery控制图片的hover效果(smartRollover.js)
Mar 18 Javascript
jquery中animate动画积累的解决方法
Oct 05 Javascript
js 立即调用的函数表达式如何写
Jan 12 Javascript
原生Javascript封装的一个AJAX函数分享
Oct 11 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
Jan 31 Javascript
Angular组件化管理实现方法分析
Mar 17 Javascript
bootstrap-table组合表头的实现方法
Sep 07 Javascript
Angularjs 手写日历的实现代码(不用插件)
Oct 18 Javascript
javascript数组拍平方法总结
Jan 20 Javascript
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
Nov 12 Javascript
Nest.js 授权验证的方法示例
Feb 22 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
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
php做下载文件的实现代码及文件名中乱码解决方法
2011/02/03 PHP
php页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
javascript获取所有同类checkbox选项(实例代码)
2013/11/07 Javascript
封装的jquery翻页滚动(示例代码)
2013/11/18 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
2015/11/18 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
2016/05/20 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
jQuery实现点击某个div打开层,点击其他div关闭层实例分析(阻止冒泡)
2016/11/18 Javascript
Angular在一个页面中使用两个ng-app的方法(二)
2017/02/20 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
2017/08/29 jQuery
jquery实现图片跟随鼠标的实例
2017/10/17 jQuery
JavaScript面向对象核心知识与概念归纳整理
2020/05/09 Javascript
python中xrange和range的区别
2014/05/13 Python
Pycharm学习教程(1) 定制外观
2017/05/02 Python
Python正确重载运算符的方法示例详解
2017/08/27 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
Python进程池Pool应用实例分析
2019/11/27 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
2020/02/18 Python
Python3使用Selenium获取session和token方法详解
2021/02/16 Python
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
波兰最大的宠物用品网上商店:FERA.PL
2019/08/11 全球购物
学习心得体会
2014/01/01 职场文书
信息技术教学反思
2014/02/12 职场文书
公务员诚信承诺书
2014/05/26 职场文书
体育比赛口号
2014/06/09 职场文书
天河观后感
2015/06/11 职场文书
转变工作作风心得体会
2016/01/23 职场文书
装修安全责任协议书
2016/03/22 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书
asyncio异步编程之Task对象详解
2022/03/13 Python
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL