JavaScript中的函数与对象以及没有函数的实例化

时间:2016-09-20 15:51:40

标签: javascript constructor prototype ecma

我知道,JavaScript中的函数只不过是一个带有构造函数的prototype属性的对象,可以用来实例化新对象。

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

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

在我看来,这应该完全相同:

 function Pear() {

 }
 let p = new Pear();
什么有效。 我只是想知道差异在哪里。我的第一种方式有解决方法吗? 或者“功能”没有“真正的”对象,并得到不同的对待?这真的只是一种好奇心。实际上没什么重要的......

1 个答案:

答案 0 :(得分:2)

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

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

但是,如果您要定义类似的内容,则可能想要。您可以使用Object.assign()创建一个新对象,包括前者的属性。

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

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