我见过这样的代码:
var foo = {
bar: function() {
foo.baz(); // instead of this.baz();
},
baz: function() { ... }
}
使用这种方法可能会遇到一些问题吗?它是否会比“this”更不容易出错(考虑到这可能会从上下文变为上下文这一事实)?它会引入任何副作用吗?我应该选择哪个?为什么?
答案 0 :(得分:1)
由于foo
是一个单例(只有一个像这样的对象,并且它的引用存储在foo
变量中),你可以这样做。
如果这是通过构造函数或工厂函数创建的(因此不是单例 - 这样可能有很多),那么你肯定想要使用this
以便调用{{1}用适当的对象引用。
使用baz()
有一个优势,当它是一个单身时,无论foo.baz()
如何被调用(例如,无论bar()
的值是什么this
被调用,它仍会正确调用bar()
。
例如,如果您将foo.baz()
作为回调引用传递,那么它仍然可以正常工作(即使foo.bar
设置为其他内容)。
答案 1 :(得分:0)
如果您要使用foo
制作其他对象,请使用类似Object.create()
的内容,这可能是一个坏主意。
Object.create()
if (typeof Object.create !== 'function') {
Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
}
newObject = oldObject.beget();