浅谈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 相关文章推荐
popdiv
Jul 14 Javascript
javascript 寻找错误方法整理
Jun 15 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
Apr 21 Javascript
快速解决Canvas.toDataURL 图片跨域的问题
May 10 Javascript
JS定时器实现数值从0到10来回变化
Dec 09 Javascript
vue.js中指令Directives详解
Mar 20 Javascript
ES6中Proxy代理用法实例浅析
Apr 06 Javascript
js实现图片加载淡入淡出效果
Apr 07 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
Jul 30 Javascript
vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
Sep 29 Javascript
详解使用Nuxt.js快速搭建服务端渲染(SSR)应用
Mar 13 Javascript
小程序云函数调用API接口的方法
May 17 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
咖啡磨器 如何选购一台适合家用的意式磨豆机
2021/03/05 新手入门
第六节 访问属性和方法 [6]
2006/10/09 PHP
操作Oracle的php类
2006/10/09 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
PHP加密解密字符串汇总
2015/04/26 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
2016/06/13 PHP
php一个文件搞定微信jssdk配置
2016/12/12 PHP
tp5修改(实现即点即改)
2019/10/18 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
JS判断文本框内容改变事件的简单实例
2014/03/07 Javascript
浅析Node在构建超媒体API中的作用
2014/07/30 Javascript
JavaScript页面模板库handlebars的简单用法
2015/03/02 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
浅析javascript中的事件代理
2015/11/06 Javascript
bootstrap flask登录页面编写实例
2016/11/01 Javascript
Bootstrap实现可折叠分组侧边导航菜单
2018/03/07 Javascript
详解Vue.js项目API、Router配置拆分实践
2018/03/16 Javascript
vue+springmvc导出excel数据的实现代码
2018/06/27 Javascript
浅谈Redux中间件的实践
2018/07/27 Javascript
使用JS代码实现俄罗斯方块游戏
2018/08/03 Javascript
VuePress 静态网站生成方法步骤
2019/02/14 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
2019/06/19 Javascript
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
2020/02/01 Javascript
python实现电子词典
2020/04/23 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
基于Python实现用户管理系统
2019/02/26 Python
33个Python爬虫项目实战(推荐)
2019/07/08 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
2020/02/28 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
建筑结构施工专业推荐信
2014/02/21 职场文书
环境卫生倡议书
2014/08/29 职场文书
暑假安全保证书
2015/02/28 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python