浅谈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编写技巧整理
Aug 23 Javascript
JS获取地址栏参数的几种方法小结
Feb 28 Javascript
JS根据年月获得当月天数的实现代码
Jul 03 Javascript
jQuery关键词说明插件cluetip使用指南
Apr 21 Javascript
jquery+Jscex打造游戏力度条
Sep 12 Javascript
微信小程序  自定义创建详细介绍
Oct 27 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
Dec 25 Javascript
Vue中使用vux的配置详解
May 05 Javascript
JS验证码实现代码
Sep 14 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
Jan 08 Javascript
在Chrome DevTools中调试JavaScript的实现
Apr 07 Javascript
ESLint 是如何检查 .vue 文件的
Nov 30 Vue.js
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获得文件扩展名三法
2006/11/25 PHP
php中处理模拟rewrite 效果
2006/12/09 PHP
php在线生成ico文件的代码
2007/10/09 PHP
Jquery实现的tab效果可以指定默认显示第几页
2013/10/16 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
2016/03/09 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
jquery购物车结算功能实现方法
2020/10/29 Javascript
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
Bootstrap fileinput文件上传预览插件使用详解
2017/05/16 Javascript
基于JQuery的Ajax方法使用详解
2017/08/16 jQuery
bootstrap multiselect下拉列表功能
2017/08/22 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
Nodejs异步流程框架async的方法
2019/06/07 NodeJs
原生js实现3D轮播图
2020/03/21 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
JavaScript编码小技巧分享
2020/09/17 Javascript
使用python分析git log日志示例
2014/02/27 Python
Python中实现对Timestamp和Datetime及UTC时间之间的转换
2015/04/08 Python
将Python代码打包为jar软件的简单方法
2015/08/04 Python
python的json包位置及用法总结
2020/06/21 Python
结合CSS3的布局新特征谈谈常见布局方法
2016/01/22 HTML / CSS
HTML5 canvas 瀑布流文字效果的示例代码
2018/01/31 HTML / CSS
德国家具折扣店:POCO
2020/02/28 全球购物
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
教你怎样写好自我评价
2013/10/05 职场文书
毕业生简单求职信
2013/11/19 职场文书
宿舍保安职务说明书
2014/02/25 职场文书
我的小天地教学反思
2014/04/30 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
Vue3.0 手写放大镜效果
2021/07/25 Vue.js
mysql使用 not int 子查询隐含陷阱
2022/04/12 MySQL
Python 文字识别
2022/05/11 Python
Java 多线程并发FutureTask
2022/06/28 Java/Android