浅谈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重写windows.alert方法实现思路
Apr 03 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
Oct 30 Javascript
探析浏览器执行JavaScript脚本加载与代码执行顺序
Jan 12 Javascript
使用jquery.form.js实现图片上传的方法
May 05 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
Jun 28 Javascript
JS简单实现移动端日历功能示例
Dec 28 Javascript
AngularJS 的$timeout服务示例代码
Sep 21 Javascript
two.js之实现动画效果示例
Nov 06 Javascript
JS在if中的强制类型转换方式
Jul 15 Javascript
详解使用React制作一个模态框
Mar 14 Javascript
vue.js实现备忘录demo
Jun 26 Javascript
js实现简单商品筛选功能
Feb 02 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 set_time_limit()函数的使用详解
2013/06/05 PHP
二进制交叉权限微型php类分享
2014/02/07 PHP
php准确计算复活节日期的方法
2015/04/18 PHP
PHP7 标准库修改
2021/03/09 PHP
JQuery团队打造的javascript单元测试工具QUnit介绍
2010/02/26 Javascript
在JavaScript中获取请求的URL参数[正则]
2010/12/25 Javascript
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
JavaScript 原型继承
2011/12/26 Javascript
在服务端(Page.Write)调用自定义的JS方法详解
2013/08/09 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
2015/02/26 Javascript
使用JQuery在线制作ppt并在线演示源码特效
2015/09/08 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
js判断主流浏览器类型和版本号的简单实现代码
2016/05/26 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
2016/05/28 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
JS实现网页端猜数字小游戏
2020/03/06 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
2020/10/21 Javascript
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
利用python实现命令行有道词典的方法示例
2017/01/31 Python
解决python 自动安装缺少模块的问题
2018/10/22 Python
Python基于traceback模块获取异常信息
2020/07/23 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
科颜氏美国官网:Kiehl’s美国
2017/01/31 全球购物
英国珠宝钟表和家居礼品精品店:David Shuttle
2018/02/24 全球购物
意大利制造的西装、衬衫和针对男士量身定制的服装:Lanieri
2018/04/08 全球购物
Servlet如何得到客户端机器的信息
2014/10/17 面试题
学前教育毕业生自荐信
2013/10/29 职场文书
中专生职业生涯规划书范文
2014/01/10 职场文书
乡下人家教学反思
2014/02/01 职场文书
蜜蜂引路教学反思
2014/02/04 职场文书
师德建设实施方案
2014/03/21 职场文书
公司年会搞笑主持词
2014/03/24 职场文书
Nginx+Tomcat实现负载均衡、动静分离的原理解析
2021/03/31 Servers
Android Studio 计算器开发
2022/05/20 Java/Android