Javascript:构造对象

Ben*_*Ben 17 javascript

我是一个javascript noob,但我有一个一直困扰我的一般性问题.让我们举一个例子:

如果我在Chrome上跳进JS控制台,我可以轻松浏览该window对象.window似乎列出了很多"类型",可以这么说.例如,window.CSSPrimitiveValue是一个这样的财产.当我window.CSSPrimitiveValue在控制台中进行评估时,我会回到看起来像构造函数的东西(可能):

function CSSPrimitiveValue() { [native code] }
Run Code Online (Sandbox Code Playgroud)

所以看起来这个函数是用某种母语实现的.不管.当然,我想构建其中一个,如下所示:

var test = new CSSPrimitiveValue();
Run Code Online (Sandbox Code Playgroud)

但后来我收到一个错误:

TypeError: Illegal constructor
Run Code Online (Sandbox Code Playgroud)

我怀疑我要么错误地调用构造函数,要么根本不是构造函数.我是一个相当大的JS noob关于这个,但有没有办法让我手动构建这些对象之一?怎么办呢?

Thi*_*ter 21

使用new关键字调用时,用JavaScript编写的任何函数都可以是构造函数.正如您已经注意到,您正在处理的函数是本机的,即用C或C++编写的(可能是C++,因为Chrome的JavaScript引擎也是用C++编写的).本机函数/对象可以具有特定的行为,例如您不能将其用作构造函数的情况 - 您无能为力.

那个"函数"甚至没有一个.call()方法,你也不能在你之前创建的对象上调用它(不是因为它没有正确的[[Prototype]]设置它会非常有用)