JavaScript 中的函数与对象以及没有函数的实例化
Functions vs. Objects in JavaScript and the instantiation without function
我知道,JavaScript 中的函数只不过是具有原型 属性 和构造函数的对象,可用于实例化新对象。
但是,无法执行以下操作:
let Pear = {
prototype : Object.prototype
};
let p = new Pear(); //Throws "caught TypeError: Pear is not a constructor"
在我看来,这应该完全一样:
function Pear() {
}
let p = new Pear();
什么有效。
我只是想知道区别在哪里。我的第一种方法有修复方法吗?
还是 "functions" 没有 "real" 对象并得到区别对待?这真的只是一种好奇心。其实没什么重要的...
new
操作的对象必须实现[[Construct]]
内部方法,否则会抛出TypeError异常(你观察到的)。
知道这一点后,我认为您不能将 new
与使用对象字面量语法生成的对象结合使用。
但是,如果您要定义类似的东西,您可能不想。您可以使用 Object.assign()
.
创建一个包含前者属性的新对象
let p = Object.assign({}, Pear);
或者,您可以使用另一种方法将对象的原型更改为其他内容。
我知道,JavaScript 中的函数只不过是具有原型 属性 和构造函数的对象,可用于实例化新对象。
但是,无法执行以下操作:
let Pear = {
prototype : Object.prototype
};
let p = new Pear(); //Throws "caught TypeError: Pear is not a constructor"
在我看来,这应该完全一样:
function Pear() {
}
let p = new Pear();
什么有效。 我只是想知道区别在哪里。我的第一种方法有修复方法吗? 还是 "functions" 没有 "real" 对象并得到区别对待?这真的只是一种好奇心。其实没什么重要的...
new
操作的对象必须实现[[Construct]]
内部方法,否则会抛出TypeError异常(你观察到的)。
知道这一点后,我认为您不能将 new
与使用对象字面量语法生成的对象结合使用。
但是,如果您要定义类似的东西,您可能不想。您可以使用 Object.assign()
.
let p = Object.assign({}, Pear);
或者,您可以使用另一种方法将对象的原型更改为其他内容。