浅谈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面向对象编程
Mar 04 Javascript
JQuery的ajax获取数据后的处理总结(html,xml,json)
Jul 14 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
Jun 24 Javascript
JavaScript中的console.profile()函数详细介绍
Dec 29 Javascript
js实现tab选项卡切换功能
Jan 13 Javascript
Javascript 实现匿名递归的实例代码
May 25 Javascript
js轮播图的插件化封装详解
Jul 17 Javascript
JS中使用media实现响应式布局
Aug 04 Javascript
Vue的路由及路由钩子函数的实现
Jul 02 Javascript
js的新生代垃圾回收知识点总结
Aug 22 Javascript
vue中uni-app 实现小程序登录注册功能
Oct 12 Javascript
Js图片点击切换轮播实现代码
Jul 27 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出现Cannot modify header information问题的解决方法大全
2008/04/09 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
2015/08/28 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
2019/05/31 PHP
地址栏上的一段语句,改变页面的风格。(教程)
2008/04/02 Javascript
33个优秀的jQuery 教程分享(幻灯片、动画菜单)
2011/07/08 Javascript
javascript 基础篇3 类,回调函数,内置对象,事件处理
2012/03/14 Javascript
关于图片的预加载过程中隐藏未知的
2012/12/19 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
深入理解javascript中的立即执行函数(function(){…})()
2014/06/12 Javascript
浅谈JavaScript字符串与数组
2015/06/03 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
2015/08/04 Javascript
jQuery无刷新上传之uploadify简单代码
2017/01/17 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
2017/05/18 Javascript
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
NodeJs 实现简单WebSocket即时通讯的示例代码
2019/08/05 NodeJs
[03:56]DOTA2完美大师赛趣味视频之小鸽子和Mineski打台球
2017/11/24 DOTA
Python进行数据提取的方法总结
2016/08/22 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
python爬虫泛滥的解决方法详解
2020/11/25 Python
美国最大的船只买卖在线市场:Boat Trader
2018/08/04 全球购物
瑞士图书网站:Weltbild.ch
2019/09/17 全球购物
CK加拿大官网:Calvin Klein加拿大
2020/03/14 全球购物
造型师求职自荐信
2013/09/27 职场文书
内业资料员岗位职责
2014/01/04 职场文书
交通安全演讲稿
2014/01/07 职场文书
任命书格式
2014/06/05 职场文书
2015年事业单位工作总结
2015/04/27 职场文书
电影建党伟业观后感
2015/06/01 职场文书
2016应届毕业生就业指导课心得体会
2016/01/15 职场文书
Python异常类型以及处理方法汇总
2021/06/05 Python
python 安全地删除列表元素的方法
2022/03/16 Python