浅谈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 27 Javascript
js获取class的所有元素
Mar 28 Javascript
UpdatePanel和Jquery冲突的解决方法
Apr 01 Javascript
js网页实时倒计时精确到秒级
Feb 10 Javascript
浅谈JavaScript数据类型及转换
Feb 28 Javascript
JS实现的Select三级下拉菜单代码
Aug 20 Javascript
基于Vuejs实现购物车功能
Aug 02 Javascript
JavaScript中in和hasOwnProperty区别详解
Aug 04 Javascript
vue引入jq插件的实例讲解
Sep 12 Javascript
vue 路由子组件created和mounted不起作用的解决方法
Nov 05 Javascript
JavaScript中的this原理及6种常见使用场景详解
Feb 14 Javascript
详解vue中v-model和v-bind绑定数据的异同
Aug 10 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如何编写易读的代码
2007/07/10 PHP
php求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
thinkphp循环结构用法实例
2014/11/24 PHP
Javascript实例教程(19) 使用HoTMetal(7)
2006/12/23 Javascript
JavaScript 设计模式学习 Factory
2009/07/29 Javascript
Jquery获取和修改img的src值的方法
2014/02/17 Javascript
javascript限制文本框输入值类型的方法
2015/05/07 Javascript
js面向对象的写法
2016/02/19 Javascript
js实现(全选)多选按钮的方法【附实例】
2016/03/30 Javascript
原生Javascript插件开发实践
2017/01/18 Javascript
Bootstrap笔记之缩略图、警告框实例详解
2017/03/09 Javascript
nodejs爬虫遇到的乱码问题汇总
2017/04/07 NodeJs
前端构建工具之gulp的语法教程
2017/06/12 Javascript
iscroll实现下拉刷新功能
2017/07/18 Javascript
Node.js pipe实现源码解析
2017/08/12 Javascript
微信小程序版本自动更新的方法
2019/06/14 Javascript
vue 实现购物车总价计算
2019/11/06 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
[03:37]2016完美“圣”典 风云人物:Mikasa专访
2016/12/07 DOTA
python计数排序和基数排序算法实例
2014/04/25 Python
跟老齐学Python之总结参数的传递
2014/10/10 Python
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
python对日志进行处理的实例代码
2018/10/06 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
2019/07/23 Python
2014植树节活动总结
2014/03/11 职场文书
关于安全演讲稿
2014/05/09 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
老人节标语大全
2014/10/08 职场文书
巾帼文明岗事迹材料
2014/12/24 职场文书
2016年6月份红领巾广播稿
2015/12/21 职场文书
会计专业自荐信范文
2019/05/22 职场文书
传单、海报早OUT了,另类传单营销方案送给你!
2019/07/15 职场文书
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
2021/06/05 Python