我需要一个不应该作为函数调用的构造函数:
function Foo() {
...
};
var f = new Foo(); // ok
Foo(); // throws error
在这里搜索并found that也许我可以使用以下来检查它是否被称为函数
if (!(this instanceof arguments.callee))
如果是,那么我应该抛出什么错误?
并且,有没有更好的方法来定义构造函数?
答案 0 :(得分:2)
arguments.callee
(不幸的是,恕我直言)在ES5严格模式下被弃用。
如果调用者忘记使用new
,我建议您实例化对象,而不是抛出错误:
function Foo() {
if (!(this instanceof Foo)) {
return new Foo();
}
...
};
答案 1 :(得分:1)
if (!(this instanceof arguments.callee))
arguments.callee
已弃用。只需使用正确的参考:this instanceof Foo
。
如果是,那么我应该抛出什么错误?
只是一个正常错误,表明原因:
throw new Error("Foo must be called as a constructor");
不过,顺便说一句,您可能会容忍它并创建一个新实例:return new Foo()
。
答案 2 :(得分:0)
这个怎么样:
/*WARNING CALL THIS ONLY AS A CONSTRUCTOR, NOT AS A FUNCTION*/