浅谈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 相关文章推荐
Tab页界面,用jQuery及Ajax技术实现
Sep 21 Javascript
修改好的jquery滚动字幕效果实现代码
Jun 22 Javascript
document.createElement()用法
Mar 13 Javascript
利用Angularjs实现幻灯片效果
Sep 07 Javascript
原生js实现瀑布流布局
Mar 08 Javascript
详谈构造函数加括号与不加括号的区别
Oct 26 Javascript
原生JS实现简单的无缝自动轮播效果
Sep 26 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
Apr 02 Javascript
解决layui的table插件无法多层级获取json数据的问题
Sep 19 Javascript
JavaScript变量Dom对象的所有属性
Apr 30 Javascript
浅谈webpack构建工具配置和常用插件总结
May 11 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
May 19 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 网络开发详解之远程文件包含漏洞
2010/04/25 PHP
PHP分页函数代码(简单实用型)
2010/12/02 PHP
基于empty函数的判断详解
2013/06/17 PHP
PHP终止脚本运行三种实现方法详解
2020/09/01 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
JavaScript 拾碎[三] 使用className属性
2010/10/16 Javascript
JavaScript单元测试ABC
2012/04/12 Javascript
JS读取XML文件示例代码
2013/11/15 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
js实现自定义路由
2017/02/04 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
详解vue表单验证组件 v-verify-plugin
2017/04/19 Javascript
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
angularJs 表格添加删除修改查询方法
2018/02/27 Javascript
Bootstrap Table实现定时刷新数据的方法
2018/08/13 Javascript
Vue前后端不同端口的实现方法
2018/09/19 Javascript
js序列化和反序列化的使用讲解
2019/01/19 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
Vue环境搭建+VSCode+Win10的详细教程
2020/08/19 Javascript
jQuery实现评论模块
2020/08/19 jQuery
jquery简易手风琴插件的封装
2020/10/13 jQuery
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
Python读取csv文件分隔符设置方法
2019/01/14 Python
Python常用数据类型之间的转换总结
2019/09/06 Python
python TCP包注入方式
2020/05/05 Python
pandas创建DataFrame的7种方法小结
2020/06/14 Python
基于Python实现粒子滤波效果
2020/12/01 Python
C++如何引用一个已经定义过的全局变量
2014/08/25 面试题
临床医师专业个人自我评价范文
2013/11/07 职场文书
便利店投资创业计划书
2014/02/08 职场文书
普通大学毕业生自荐信范文
2014/02/23 职场文书
环境工程专业自荐信
2014/03/03 职场文书
竞选宣传委员演讲稿
2014/05/24 职场文书
律师函格式范本
2015/05/27 职场文书
解决persistence.xml配置文件修改存放路径的问题
2022/02/24 Java/Android