我以一种奇怪的方式使用eval
函数,作为构造函数。
try {
var y = new eval()
} catch(error) {
console.log("caught a " + error.name + ": " + error.message);
}
它抛出错误,
caught a TypeError: function eval() { [native code] } is not a constructor
如错误消息所示,eval是一个函数,但不是构造函数。
问题是,不是所有的javascript函数都可以作为构造函数吗?
答案 0 :(得分:6)
并非所有函数都是构造函数。
构造函数是function values with a [[Construct]] internal property,并非所有函数都具有。这在语言规范的6.1.7.2 Object Internal Methods and Internal Slots中明确说明:
函数对象不一定是构造函数,并且此类非构造函数对象没有[[Construct]]内部方法。
使用new
或Reflect.construct
将非构造函数作为构造函数调用会抛出TypeError
。