假设我有以下对象构造函数:
function Foo(bar) {
this.bar = bar;
}
如果我在没有new关键字的全局范围内运行该函数,那么bar将在Foo()调用的任何范围内设置:
var foo = Foo(42);
console.log(bar); // 42
console.log(foo.bar); // ERROR
所以我的想法是做这样的事情:
function Foo(bar) {
if(!(this instanceof Foo)) {
// return a Foo object
return new Foo(bar);
}
this.bar = bar;
}
这样,如果我这样做new Foo(42) or Foo(42),它总是会返回一个Foo对象。
这是有史以来一个好主意?如果有,是什么时候?什么时候(以及为什么)避免这种技术是明智的?