浅谈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中的onkeyup和onkeydown区别介绍
Apr 28 Javascript
Javascript验证方法大全
Sep 21 Javascript
js获取客户端操作系统类型的方法【测试可用】
May 27 Javascript
jQuery中delegate()方法的用法详解
Oct 13 Javascript
详解微信小程序开发—你期待的分享功能来了,微信小程序序新增5大功能
Dec 23 Javascript
详解JS中的立即执行函数
Feb 24 Javascript
axios学习教程全攻略
Mar 26 Javascript
在使用JSON格式处理数据时应该注意的问题小结
May 20 Javascript
详解Angular-cli生成组件修改css成less或sass的实例
Jul 27 Javascript
详解如何在react中搭建d3力导向图
Jan 12 Javascript
js调用设备摄像头的方法
Jul 19 Javascript
在Vue-cli里应用Vuex的state和mutations方法
Sep 16 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
PHPMyAdmin 快速配置方法
2009/05/11 PHP
Smarty局部缓存的几种方法简介
2014/06/17 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
PHP redis实现超迷你全文检索
2017/03/04 PHP
PHP常见的几种攻击方式实例小结
2019/04/29 PHP
Javascript中获取出错代码所在文件及行数的代码
2010/09/23 Javascript
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
使用JS读秒使用示例
2013/09/21 Javascript
js中AppendChild与insertBefore的用法详细解析
2013/12/16 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
深入理解JS中的substr和substring
2016/04/26 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
Node.js读写文件之批量替换图片的实现方法
2016/09/07 Javascript
详解数组Array.sort()排序的方法
2020/05/09 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
Vue中"This dependency was not found"问题的解决方法
2018/06/19 Javascript
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
vue 中的keep-alive实例代码
2018/07/20 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
微信小程序里引入SVG矢量图标的方法
2019/09/20 Javascript
[06:59]DOTA2-DPC中国联赛3月7日Recap集锦
2021/03/11 DOTA
学习python类方法与对象方法
2016/03/15 Python
使用python为mysql实现restful接口
2018/01/05 Python
对python 矩阵转置transpose的实例讲解
2018/04/17 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
Python适配器模式代码实现解析
2019/08/02 Python
pytorch 图像预处理之减去均值,除以方差的实例
2020/01/02 Python
Python实现Appium端口检测与释放的实现
2020/12/31 Python
浅谈pc和移动端的响应式的使用
2019/01/03 HTML / CSS
HTML5 canvas画矩形时出现边框样式不一致的解决方法
2013/10/14 HTML / CSS
美国创意之家:BulbHead
2017/07/12 全球购物
商务主管岗位职责
2013/12/08 职场文书
自查自纠整改报告
2014/11/06 职场文书
老兵退伍感言
2015/08/03 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书
Linux系统下安装PHP7.3版本
2021/06/26 PHP