我知道,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();
什么有效。
我只是想知道差异在哪里。我的第一种方式有解决方法吗?
或者“功能”没有“真正的”对象,并得到不同的对待?这真的只是一种好奇心。实际上没什么重要的......
答案 0 :(得分:2)
new
操作的对象必须实现[[Construct]]
内部方法,否则会抛出TypeError异常(您观察到的内容)。
知道这一点,我不相信你可以将new
与使用对象文字语法生成的对象结合使用。
但是,如果您要定义类似的内容,则可能想要。您可以使用Object.assign()
创建一个新对象,包括前者的属性。
let p = Object.assign({}, Pear);
或者,您可以使用其他方法将对象的原型更改为其他内容。