2016-09-20 106 views
1

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

但是,这是不可能做到以下几点:

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

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

function Pear() { 

} 
let p = new Pear(); 

的作品。 我只是想知道差异在哪里。我的第一种方式有没有修复? 或者“功能”没有“真正”的对象,并得到不同的待遇?这真的只是一件好奇的事情。实际上没有什么重要...

回答

2

new运行的对象必须实现[[Construct]]内部方法,否则将引发TypeError异常(您观察到的)。

知道了,我不相信你可以将new与使用对象字面值语法生成的对象结合使用。

但是,如果你正在定义类似的东西,你可能不想想要来。您可以创建一个新对象,其中包括Object.assign()的前者的属性。

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

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

+0

那就是我还想到的:JavaScript中有两种不同的对象。函数对象和对象对象。函数对象有一个特殊的属性(字符串),其中包含可以用()调用的可评估内容。普通对象不包含此属性。它似乎不可能将一个对象对象转换为一个函数对象。 – David