浅谈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 相关文章推荐
在js中使用"with"语句中跨frame的变量引用问题
Mar 08 Javascript
javascript两段代码,两个小技巧
Feb 04 Javascript
javascript中局部变量和全局变量的区别详解
Feb 27 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
Feb 26 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
Oct 08 Javascript
Ajax与服务器(JSON)通信实例代码
Nov 05 Javascript
jQuery常见的选择器及用法介绍
Dec 20 Javascript
Three.js基础部分学习
Jan 08 Javascript
slideToggle+slideup实现手机端折叠菜单效果
May 25 Javascript
微信小程序引入Vant组件库过程解析
Aug 06 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
Sep 13 Javascript
鸿蒙系统中的 JS 开发框架
Sep 18 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程序员工具
2008/05/26 PHP
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
2014/04/10 PHP
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
php一维二维数组键排序方法实例总结
2014/11/13 PHP
PHP中类的继承和用法实例分析
2016/05/24 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
漂亮的widgets,支持换肤和后期开发新皮肤
2007/04/23 Javascript
我见过最全的个人js加解密功能页面
2007/12/12 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
js判断ie版本号的简单实现代码
2014/03/05 Javascript
js控制鼠标事件移动及移出效果显示
2014/10/19 Javascript
JavaScript常用的弹出广告及背投广告实现方法
2015/02/06 Javascript
js window对象属性和方法相关资料整理
2015/11/11 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
2016/01/01 Javascript
老生常谈js中的MVC
2017/07/25 Javascript
js构造函数创建对象是否加new问题
2018/01/22 Javascript
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
Python实现在Linux系统下更改当前进程运行用户
2015/02/04 Python
Python 基于Twisted框架的文件夹网络传输源码
2016/08/28 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
2020/05/04 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
Python用Jira库来操作Jira
2020/12/28 Python
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
中国最大的潮流商品购物网站:YOHO!BUY有货
2017/01/07 全球购物
Intimissimi德国网上商店:意大利知名内衣品牌
2018/04/03 全球购物
ProBikeKit德国:在线公路自行车专家
2018/06/03 全球购物
介绍一下内联、左联、右联
2013/12/31 面试题
机关单位人员学雷锋心得体会
2014/03/10 职场文书
投诉书范文
2015/07/02 职场文书
小米11和iphone12哪个值得买?小米11对比iphone12评测
2021/04/21 数码科技
Django给表单添加honeypot验证增加安全性
2021/05/06 Python
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL