浅谈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开发的数独游戏代码
Oct 29 Javascript
JS维吉尼亚密码算法实现代码
Nov 09 Javascript
javascript处理table表格的代码
Dec 06 Javascript
jQuery 拖动层(在可视区域范围内)
May 24 Javascript
js获取当月最后一天实例代码
Nov 19 Javascript
Javascript实现Web颜色值转换
Feb 05 Javascript
javascript异步处理工作机制详解
Apr 13 Javascript
ES6中参数的默认值语法介绍
May 03 Javascript
vue.js学习之UI组件开发教程
Jul 03 Javascript
vue移动端下拉刷新和上滑加载
Oct 27 Javascript
jQuery实现查看图片功能
Dec 01 jQuery
使用vuex-persistedstate本地存储vuex
Apr 29 Vue.js
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
全国FM电台频率大全 - 26 西藏自治区
2020/03/11 无线电
PHP在不同页面间传递Json数据示例代码
2013/06/08 PHP
利用中国天气预报接口实现简单天气预报
2014/01/20 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
2015/09/25 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
浅谈PHP中的
2016/04/23 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
简述php环境搭建与配置
2016/12/05 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
JavaScript中的Screen屏幕对象
2008/01/16 Javascript
Js callBack 返回前一页的js方法
2008/11/30 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
nodejs中转换URL字符串与查询字符串详解
2014/11/26 NodeJs
今天抽时间给大家整理jquery和ajax的相关知识
2015/11/17 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
使用Vue动态生成form表单的实例代码
2018/04/26 Javascript
详解NodeJs开发微信公众号
2018/05/25 NodeJs
微信小程序生成分享海报方法(附带二维码生成)
2019/03/29 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
vue滚动tab跟随切换效果
2020/06/29 Javascript
Nodejs技巧之Exceljs表格操作用法示例
2019/11/06 NodeJs
[50:20]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第四局
2016/03/06 DOTA
Python使用itchat模块实现简单的微信控制电脑功能示例
2019/08/26 Python
python查询MySQL将数据写入Excel
2020/10/29 Python
Python更改pip镜像源的方法示例
2020/12/01 Python
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
澳大利亚鞋仓库:Shoe Warehouse
2019/07/25 全球购物
大型车展策划方案
2014/02/01 职场文书
小学三八妇女节活动方案
2014/03/16 职场文书
爱国口号
2014/06/19 职场文书
十佳青年事迹材料
2014/08/21 职场文书
病危通知单
2015/04/17 职场文书
推销搭讪开场白
2015/05/28 职场文书
SQL Server远程连接的设置步骤(图文)
2022/03/23 SQL Server
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA
Android studio 简单计算器的编写
2022/05/20 Java/Android