我正在尝试在 JavaScript 中实现某种类层次结构。我想我理解了原型链,但我仍然需要理清构造函数链。按照大卫弗拉纳根的权威指南,我写了
function DerivedClass()
{
BaseClass.apply(this, arguments); // chain constructors
// do some initializations specific to DerivedClass...
}
var foo = new DerivedClass();
哪里BaseClass()
是我用 C++ 编写的本机函数(我正在使用QtScript)。我的问题是,然后,BaseClass()
它被称为函数,而不是构造函数。
我可以编写代码BaseClass()
以始终充当构造函数,但是它被调用了。但我担心有一天我的一个用户可能会忘记new
并只是写
var bar = BaseClass();
在这种情况下,我BaseClass()
想做一些比初始化全局对象更明智的事情。例如:
if (!context->isCalledAsConstructor()) fail_gracefully();
但是随后构造函数链接失败!
有没有办法可以链接构造函数并BaseClass()
实际上被称为构造函数?还是我应该教育我的用户永远不要忘记new
?现在我很想通过以下方式替换上面的测试:
if (context->thisObject().strictlyEquals(engine->globalObject()))
fail_gracefully();
但我想知道是否有更清洁的方法来处理这个问题。
谢谢!