浅谈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 相关文章推荐
写了10年的Javascript也未必全了解的连续赋值运算
Mar 25 Javascript
jQuery.fn和jQuery.prototype区别介绍
Oct 05 Javascript
tangram框架响应式加载图片方法
Nov 21 Javascript
JavaScript 模块化编程(笔记)
Apr 08 Javascript
JavaScript数据库TaffyDB用法实例分析
Jul 27 Javascript
AngularJS 2.0入门权威指南
Oct 08 Javascript
javascript基本数据类型和转换
Mar 17 Javascript
webpack3+React 的配置全解
Aug 21 Javascript
五步轻松实现zTree的使用
Nov 01 Javascript
Vue实现购物车场景下的应用
Nov 27 Javascript
JS中数据结构与算法---排序算法(Sort Algorithm)实例详解
Jun 17 Javascript
关于微信小程序map组件z-index的层级问题分析
Jul 09 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实现的通用图片处理类
2015/03/24 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
PHP实现添加购物车功能
2017/03/06 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
2020/02/03 PHP
PHP rsa加密解密算法原理解析
2020/12/09 PHP
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
JQuery设置获取下拉菜单某个选项的值(比较全)
2014/08/05 Javascript
2014年最火的Node.JS后端框架推荐
2014/10/27 Javascript
jQuery实现仿淘宝带有指示条的图片转动切换效果完整实例
2015/03/04 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
2016/06/16 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
2016/07/11 Javascript
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
webpack独立打包和缓存处理详解
2017/04/03 Javascript
简单的网页广告特效实例
2017/08/19 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
原生js实现表格翻页和跳转
2020/09/29 Javascript
python用字典统计单词或汉字词个数示例
2014/04/22 Python
python使用nntp读取新闻组内容的方法
2015/05/08 Python
python网络编程之数据传输UDP实例分析
2015/05/20 Python
python3 unicode列表转换为中文的实例
2018/10/26 Python
对Django外键关系的描述
2019/07/26 Python
简单了解Django ORM常用字段类型及参数配置
2020/01/07 Python
HTML5公共页面提取作为公用代码的方法
2020/06/30 HTML / CSS
Ratchet 模态框的实现
2020/08/19 HTML / CSS
vivo智能手机官方商城:vivo
2016/09/22 全球购物
美国校服网上商店:French Toast
2019/10/08 全球购物
花卉与景观设计系大学生求职信
2013/10/01 职场文书
教师业务学习制度
2014/01/25 职场文书
招聘与培训专员岗位职责
2014/01/30 职场文书
酒店值班经理的工作职责范本
2014/02/18 职场文书
护理专业毕业生自我鉴定总结
2014/03/24 职场文书
安全责任书模板
2014/07/22 职场文书
股东授权委托书范文
2014/09/13 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
Redis唯一ID生成器的实现
2022/07/07 Redis