想知道下面两个代码有什么区别。在第一种情况下,我使用this
来引用对象,在第二种情况下,我使用了对象名称。虽然两者都有效,但我想知道两者之间是否存在真正的差异。
(function() {
var app = {
init: function () {
app.addLun('Hello');
},
addLun: function(a) {
console.log(a);
}
};
});
})();
和
var app = {
init: function () {
this.addLun('Hello');
},
addLun: function(a) {
console.log(a);
}
};
});
})();
答案 0 :(得分:1)
this
指的是函数的上下文/范围,因此根据您调用它的方式,它可以引用app
,window
或许多其他范围...... < / p>
app
是指实际应用对象(如果该对象存在于该范围内)。
答案 1 :(得分:0)
使用this
和app
绝对不一样。拿这个(有点人为的)例子:
var app = {
init: {
foo: function () {
// Think 'this' is app?
this.addLun('Hello');
}
},
addLun: function(a) {
console.log(a);
}
};
var app2 = {
init: {
foo: function () {
app2.addLun('Hello');
}
},
addLun: function(a) {
console.log(a);
}
};
app2.init.foo(); // prints Hello
app.init.foo(); // error - no method called addLun
this
是当前上下文,app
是您刚刚创建的对象。
答案 2 :(得分:-1)
是的,有区别。如果你想拥有更多的app对象实例(例如,你可以用jQuery.extend()克隆它),你需要使用第二个变量来正确工作。