假设我有以下对象构造函数:
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
对象。
这是有史以来一个好主意?如果有,是什么时候?什么时候(以及为什么)避免这种技术是明智的?