1

我知道,JavaScript 中的函数只不过是一个具有原型属性和构造函数的对象,可用于实例化新对象。

但是,无法执行以下操作:

 let Pear = {
    prototype : Object.prototype
 };
 let p = new Pear();  //Throws "caught TypeError: Pear is not a constructor"

在我看来,这应该完全一样:

 function Pear() {

 }
 let p = new Pear();

什么有效。我只是想知道区别在哪里。我的第一种方法有解决办法吗?还是“功能”不是“真实”对象并得到不同的对待?这真的只是一个好奇的事情。其实没有什么重要的...

4

1 回答 1

2

操作的对象new必须实现[[Construct]]内部方法,否则会抛出 TypeError 异常(你观察到的)。

知道这一点,我不相信您可以new与使用对象文字语法生成的对象结合使用。

但是,如果您要定义这样的东西,您可能不想这样。您可以使用Object.assign().

let p = Object.assign({}, Pear);

或者,您可以使用另一种方式将对象的原型更改为其他内容。

于 2016-09-20T15:55:19.643 回答