我是一个javascript noob,但我有一个一直困扰我的一般性问题。让我们举一个例子:
如果我在Chrome上跳转到JS控制台,我可以轻松浏览window
对象。 window
似乎列出了很多“类型”,可以这么说。例如,window.CSSPrimitiveValue
就是这样一个属性。当我在控制台中评估window.CSSPrimitiveValue
时,我会回到看起来像构造函数的东西(可能):
function CSSPrimitiveValue() { [native code] }
所以看起来这个函数是用某种母语实现的。不管。当然,我想构建其中一个,如:
var test = new CSSPrimitiveValue();
但后来我收到了一个错误:
TypeError: Illegal constructor
我怀疑我要么错误地调用构造函数,要么根本不是构造函数。我是一个相当大的JS noob关于这个,但有没有办法让我手动构建这些对象之一?怎么办呢?
答案 0 :(得分:21)
使用new
关键字调用时,用JavaScript编写的任何函数都可以是构造函数。正如您已经注意到,您正在处理的函数是 native ,即用C或C ++编写(可能是C ++,因为Chrome的JavaScript引擎也是用C ++编写的)。本机函数/对象可以具有特定的行为,例如您不能将其用作构造函数的情况 - 您无能为力。
“函数”甚至没有.call()
方法,你也不能在之前创建的对象上调用它(并不是因为它没有正确[[]原型]]设置)