JavaScript中new操作符的两种实现机制有何探究价值?

更新于
2026-09-26 12:10:30
0阅读来源:SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计952个文字,预计阅读时间需要4分钟。

JavaScript中new操作符的两种实现机制有何探究价值?

前言+当你+new+一个构造函数时+发生了什么?+众人皆知的三步:+创建一个空对象,将它的引用赋给this,继承函数的原型;+通过this将属性和方法添加到这个对象;+最后返回this指向的对象。

前言

当你 new 一个构造函数时发生了什么?

“众所周知”的三步:

创建一个空对象,将它的引用赋给 this,继承函数的原型;通过 this 将属性和方法添加至这个对象;最后返回 this 指向的新对象,也就是实例。

一般来说在js中大概是这样的:

function Mynew(parent,...rest){ let obj={}; obj.__proto__=parent.prototype; let res=parent.apply(obj,rest); return typeof res=="object"?res:obj; }

上面提到的“空对象”只是简称。事实上,就算是定义一个 {} ,它也会从 Object.prototype 上继承很多方法和属性。
《JavaScript语言精髓与编程实践》中提出了一个“更加空白的对象”:它有两种情况 —— Constructor.prototype 值为null;或者Object.getPrototypeOf(obj) 值为null。

阅读全文

本文共计952个文字,预计阅读时间需要4分钟。

JavaScript中new操作符的两种实现机制有何探究价值?

前言+当你+new+一个构造函数时+发生了什么?+众人皆知的三步:+创建一个空对象,将它的引用赋给this,继承函数的原型;+通过this将属性和方法添加到这个对象;+最后返回this指向的对象。

前言

当你 new 一个构造函数时发生了什么?

“众所周知”的三步:

创建一个空对象,将它的引用赋给 this,继承函数的原型;通过 this 将属性和方法添加至这个对象;最后返回 this 指向的新对象,也就是实例。

一般来说在js中大概是这样的:

function Mynew(parent,...rest){ let obj={}; obj.__proto__=parent.prototype; let res=parent.apply(obj,rest); return typeof res=="object"?res:obj; }

上面提到的“空对象”只是简称。事实上,就算是定义一个 {} ,它也会从 Object.prototype 上继承很多方法和属性。
《JavaScript语言精髓与编程实践》中提出了一个“更加空白的对象”:它有两种情况 —— Constructor.prototype 值为null;或者Object.getPrototypeOf(obj) 值为null。

阅读全文