JavaScript中实现new的两种方式,你能详细探究其背后的原理和区别吗?
- 内容介绍
- 文章标签
- 相关推荐
本文共计979个文字,预计阅读时间需要4分钟。
前言+当你+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分钟。
前言+当你+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。

