Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何定义构造函数?_Javascript_Oop - Fatal编程技术网

Javascript 如何定义构造函数?

Javascript 如何定义构造函数?,javascript,oop,Javascript,Oop,我需要一个不应作为函数调用的构造函数: function Foo() { ... }; var f = new Foo(); // ok Foo(); // throws error 在这里搜索,也许我可以使用下面的内容来检查它是否作为函数调用 if (!(this instanceof arguments.callee)) 如果是,那么我应该抛出什么错误 还有,有没有更好的方法来定义构造函数 不推荐使用。只需使用适当的引用:此Foo实例 如果是,那么我应该抛出什么错误 仅显示原因的

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

function Foo() {
  ...
};

var f = new Foo(); // ok
Foo();  // throws error
在这里搜索,也许我可以使用下面的内容来检查它是否作为函数调用

if (!(this instanceof arguments.callee))
如果是,那么我应该抛出什么错误

还有,有没有更好的方法来定义构造函数

不推荐使用。只需使用适当的引用:
此Foo实例

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

仅显示原因的正常错误:

throw new Error("Foo must be called as a constructor");

顺便说一句,您也可以容忍它并创建一个新实例:
返回新的Foo()

参数。被调用方在ES5严格模式下(不幸的是,IMHO)不推荐使用

如果调用方忘记使用
new
,我建议您实例化对象,而不是抛出错误:

function Foo() {
    if (!(this instanceof Foo)) {
         return new Foo();
    }

    ...
};
这个怎么样:

/*WARNING CALL THIS ONLY AS A CONSTRUCTOR, NOT AS A FUNCTION*/

如果你不想将构造函数作为函数调用,可以尝试使用Singleton并将其私有化?不要愚蠢地认为每个用户都会阅读(并遵循)这样的文档:-)我有点讽刺,但同时,汽车也不会阻止你在引擎中不加油的情况下驾驶。你应该知道如何正确使用汽车,或者阅读文档了解如何使用。JSDoc格式:
/***@constructor*/
/*WARNING CALL THIS ONLY AS A CONSTRUCTOR, NOT AS A FUNCTION*/