我们假设我有以下对象构造函数:
function Foo(bar) {
this.bar = bar;
}
Run Code Online (Sandbox Code Playgroud)
如果我在没有new关键字的全局范围内运行该函数,那么bar将在以下任何范围内设置Foo():
var foo = Foo(42);
console.log(bar); // 42
console.log(foo.bar); // ERROR
Run Code Online (Sandbox Code Playgroud)
所以我的想法是做这样的事情:
function Foo(bar) {
if(!(this instanceof Foo)) {
// return a Foo object
return new Foo(bar);
}
this.bar = bar;
}
Run Code Online (Sandbox Code Playgroud)
这样,如果我做的new Foo(42) 还是 Foo(42),它会始终返回一个Foo对象.
这是有史以来一个好主意?如果是的话,何时?何时(和为什么)避免这种技术是明智的?
我一直在阅读很多关于javascript中"继承"的文章.其中一些使用,new而其他人推荐Object.Create.我读的越多,我就越困惑,因为它似乎存在无穷无尽的变体来解决继承问题.
有人可以向我展示最受欢迎的方式(如果有的话,还是事实上的标准)?
(我想有一个基础物体Model,我可以延伸RestModel或LocalStorageModel).