如何定义构造函数?

时间:2013-09-10 10:26:36

标签: javascript oop

我需要一个不应该作为函数调用的构造函数:

function Foo() {
  ...
};

var f = new Foo(); // ok
Foo();  // throws error

在这里搜索并found that也许我可以使用以下来检查它是否被称为函数

if (!(this instanceof arguments.callee))

如果是,那么我应该抛出什么错误?

并且,有没有更好的方法来定义构造函数?

3 个答案:

答案 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*/