博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一天一个知识点 - 浅谈 JavaScript new 究竟做了什么?
阅读量:7087 次
发布时间:2019-06-28

本文共 1157 字,大约阅读时间需要 3 分钟。

前言

前些日子,在掘金上看到一片热门文章。该文作者以面试官的角度,详细阐述了作为一名 web 应聘者应该具有哪些技能,才会更让人青睐。

在对比自身的过程中,发现有一些问题,或许了解,但不全面,这也是本系列文章诞生的缘由。

new 的定义

new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。

一个简单例子

function obj(msg){    this.msg = msg        this.talk = function(){        console.log(this.msg)    }}obj.prototype.p = '我是构造函数 obj 的原型对象的一个属性'var o = new obj('hello world')复制代码

使用 new 操作符实例化一个对象,会发生以下事情:

  1. 一个继承自 obj.prototype 的新对象被创建。
  2. 使用指定的参数调用构造函数 obj ,并将 this 绑定到新创建的对象。
  3. 由构造函数返回的对象就是 new 表达式的结果。
// 验证1 : 一个继承自 obj.prototype 的新对象被创建 // o.[[Prototype]] 指向 obj.prototype(或者说 bbj.[[Prototype]])o.__proto__ === obj.prototype => true// o.[[Prototype]].[[Prototype]] 指向 Objecto.__proto__.__proto__ === Object.prototype => true// 验证2 : 一个继承自 obj.prototype 的新对象被创建 // o 拥有自身属性 msg 和 talk 函数o => obj {
msg: "hello world", talk: ƒ}// o 是 obj 的一个示例o instanceof obj => true// 验证3 : 由构造函数返回的对象就是 new 表达式的结果// o 是一个实例对象, 是 new 表达式的结果o => obj {
msg: "hello world", talk: ƒ}复制代码

使用伪代码解释 new 的过程

// step 1. 创建一个新对象 ovar o = {}// step 2. o.原型对象 指向 F 的原型对象o.__proto__ = F.prototype// step 3. 将 this 绑定到 oF.call(o)// step 4. 返回新对象 oreturn o复制代码

参考

系列文章

转载于:https://juejin.im/post/5c8ef8d0f265da67de46bf94

你可能感兴趣的文章
BS程序怎样通过浏览器了解点击响应时间
查看>>
(转) 密码学中的“盐值 Salt”
查看>>
UIWebView的高度不对问题
查看>>
POCO库中文编程参考指南(10)如何使用TCPServer框架?
查看>>
Java集合源码分析(二)Linkedlist
查看>>
安卓手机GPU OpenCL总结(转)
查看>>
【大数据】基于Hadoop的HBase的安装(转)
查看>>
SpringBoot四大神器之Actuator
查看>>
html复习之标签整理
查看>>
Yii2 使用 faker 生成假数据(转)
查看>>
Consul安装使用
查看>>
tomcat事件处理机制
查看>>
JS BUG 传递数字过大,数据值会变化
查看>>
橡皮筋进度条ElasticProgressBar
查看>>
spring boot引入json,jsonobject,需要指定jdk15
查看>>
企业架构 - 涉众管理(Stakeholder Management)
查看>>
Ubuntu11.10 解决rar文件解压错误
查看>>
深入理解Java虚拟机:JVM高级特性与最佳实践(围绕内存管理和高并发等问题对JVM深入分析)...
查看>>
sqlplus: error while loading shared libraries: /u01/app/lib/libclntsh.so.11.1
查看>>
ORACLE等待事件:enq: TX - row lock contention
查看>>