浅谈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 相关文章推荐
jQuery打印图片pdf、txt示例代码
Jul 22 Javascript
jQuery复制表单元素附源码分享效果演示
Sep 30 Javascript
浅析JavaScript Array和string的转换(推荐)
May 20 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
Aug 03 Javascript
微信小程序 Audio API详解及实例代码
Sep 30 Javascript
Vue自定义指令介绍(2)
Dec 08 Javascript
详解vue服务端渲染(SSR)初探
Jun 19 Javascript
webpack vue项目开发环境局域网访问方法
Mar 20 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
Jun 11 Javascript
layui table 多行删除(id获取)的方法
Sep 12 Javascript
layui use 定义js外部引用函数的方法
Sep 26 Javascript
Angular性能优化之第三方组件和懒加载技术
May 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
使用Apache的rewrite技术
2006/06/22 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
PHP生成树的方法
2015/07/28 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
为何说PHP引用是个坑,要慎用
2018/04/02 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
Javascript 对象的解释
2008/11/24 Javascript
JQuery radio(单选按钮)操作方法汇总
2015/04/15 Javascript
Bootstrap每天必学之折叠(Collapse)插件
2016/04/25 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
Nodejs从有门道无门菜鸟起飞必看教程
2016/07/20 NodeJs
js动态添加的DIV中的onclick事件简单实例
2016/07/25 Javascript
ionic+AngularJs实现获取验证码倒计时按钮
2017/04/22 Javascript
JS随机排序数组实现方法分析
2017/10/11 Javascript
微信小程序中换行空格(多个空格)写法详解
2018/07/10 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
2018/10/09 Javascript
JavaScrip数组去重操作实例小结
2019/06/20 Javascript
Vue实战教程之仿肯德基宅急送App
2019/07/19 Javascript
javaScript中indexOf用法技巧
2019/11/26 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
2019/12/09 Javascript
JS如何在不同平台实现多语言方式
2020/07/16 Javascript
vue界面发送表情的实现代码
2020/09/11 Javascript
[01:14]2014DOTA2展望TI 剑指西雅图newbee战队专访
2014/06/30 DOTA
Python入门之三角函数sin()函数实例详解
2017/11/08 Python
python实现批量按比例缩放图片效果
2018/03/30 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
欢送退休感言
2014/02/08 职场文书
2014年行政执法工作总结
2014/12/11 职场文书
个人工作保证书
2015/02/28 职场文书
钢琴师观后感
2015/06/12 职场文书
在职证明范本
2015/06/15 职场文书
PHP策略模式写法
2021/04/01 PHP
golang生成并解析JSON
2022/04/14 Golang