说我想要创建以下API:使新的关键字可选
var api = function(){}
api.prototype = {
constructor: api,
method: function() {
return this;
}
};
现在,这会像:
var myApi = new api();
myApi.method();
但是,让我们说,我想使new
关键字可选,因此,这将工作:
api().method();
我会出我的头做:
var api = function() {
if (!(this instanceof api)) {
return new api();
}
};
但是我想知道,这可能很容易被感染,或者是否有其他危险使用此方法?我知道f.ex jQuery不会这样做(它们将构造函数卸载到原型方法),所以我确信没有这样做是有好理由的。我只是不知道他们。
您的解决方案看起来非常好,我已经看到在许多地方使用。例如,参见[这里](http://ejohn.org/blog/simple-class-instantiation/)。 – bfavaretto