JavaScript中实现new的两种方式,你能详细探究其背后的原理和区别吗?

2026-04-05 08:038阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计979个文字,预计阅读时间需要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。

阅读全文

本文共计979个文字,预计阅读时间需要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。

阅读全文