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