浅谈javascript中new操作符的原理


Posted in Javascript onJune 07, 2016

javascript中的new是一个语法糖,对于学过c++,java 和c#等面向对象语言的人来说,以为js里面是有类和对象的区别的,实现上js并没有类,一切皆对象,比java还来的彻底

new的过程实际上是创建一个新对象,把新象的原型设置为构造器函数的原型,在使用new的过程中,一共有3个对象参与了协作,构造器函数是第一个对象,原型对象是二个,新生成了一个空对象是第三个对象,最终返回的是一个空对象,但这个空对象不是真空的,而是已经含有原型的引用(__proto__)

步骤如下:

(1) 创建一个空对象obj

(2) 让空对象的__proto__(IE没有该属性)成员指向了构造函数的prototype成员对象

(3) 使用apply调用构造器函数,this绑定到空对象obj上。

(4) 返回空对象obj

浅谈javascript中new操作符的原理

可以自己写个函数替代使用new也是完全可以的,示例代码如下:

function NEW_OBJECT(Foo){

var obj={};
obj.__proto__=Foo.prototype;
obj.__proto__.constructor=Foo;
Foo.apply(obj,arguments)
return obj;

}

以上这篇浅谈javascript中new操作符的原理就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript js cookie的存储,获取和删除
Dec 29 Javascript
Prototype ObjectRange对象学习
Jul 19 Javascript
2012年开发人员的16款新鲜的jquery插件体验分享
Dec 28 Javascript
jquery的父子兄弟节点查找示例代码
Mar 03 Javascript
jQuery trigger()方法用法介绍
Jan 13 Javascript
jQuery+PHP实现动态数字展示特效
Mar 14 Javascript
jQuery实现div拖拽效果实例分析
Feb 20 Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
Nov 03 Javascript
jQuery正则验证注册页面经典实例
Jun 10 jQuery
JS获取子、父、兄节点方法小结
Aug 14 Javascript
详解ng-alain动态表单SF表单项设置必填和正则校验
Jun 11 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
Nov 05 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
Jun 07 #Javascript
jQuery原理系列-常用Dom操作详解
Jun 07 #Javascript
浅析BootStrap栅格系统
Jun 07 #Javascript
浅谈jQuery 选择器和dom操作
Jun 07 #Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
Jun 07 #Javascript
DOM操作和jQuery实现选项移动操作的简单实例
Jun 07 #Javascript
Knockoutjs 学习系列(二)花式捆绑
Jun 07 #Javascript
You might like
分享一下贝贝成长进度的php代码
2012/09/14 PHP
PHP中的日期加减方法示例
2014/08/21 PHP
PHP 微信支付类 demo
2015/11/30 PHP
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
自己编写的类似JS的trim方法
2013/10/09 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
AngularJS中的Promise详细介绍及实例代码
2016/12/13 Javascript
livereload工具实现前端可视化开发【推荐】
2016/12/23 Javascript
常用的js方法合集
2017/03/10 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
2017/04/08 jQuery
Vue中util的工具函数实例详解
2019/07/08 Javascript
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
JS实现扫码枪扫描二维码功能
2020/01/03 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
2020/08/04 Javascript
Python3.x版本中新的字符串格式化方法
2015/04/24 Python
python中的随机函数小结
2018/01/27 Python
Python装饰器模式定义与用法分析
2018/08/06 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
关于pymysql模块的使用以及代码详解
2019/09/01 Python
pytorch实现mnist数据集的图像可视化及保存
2020/01/14 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
2020/05/26 Python
Python bisect模块原理及常见实例
2020/06/17 Python
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
联想英国官网:Lenovo英国
2019/07/17 全球购物
大唐电信科技股份有限公司java工程师面试经历
2016/12/09 面试题
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
2014/09/26 面试题
工业自动化毕业生自荐信范文
2014/01/04 职场文书
临床医师专业个人自我评价
2014/01/08 职场文书
初中物理教学反思
2014/01/14 职场文书
好邻里事迹材料
2014/01/16 职场文书
餐厅经理岗位职责和岗位目标
2014/02/13 职场文书
统计岗位职责
2014/02/21 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
《少年闰土》教学反思
2016/02/18 职场文书