如果我调用find函数APP.count()一切正常我得到了正确的结果但是当我调用APP.add()时,我得到this.basket是未定义的。我不知道为什么会发生这种情况?
var APP = (function() {
var
basket = [
{ id: 100, price: 10, description: '', name: 'item one', quantity: 10, url: '' },
{ id: 200, price: 20, description: '', name: 'item two', quantity: 15, url: '' }
],
find = function(item) {
for(var i = 0; i < this.basket.length; i++) {
if(this.basket[i].id === item) {
return i
}
}
return null
},
add = function(item) {
var itemFound = find(item)
},
count = function() {
var total = 0;
for(var i = 0; i < this.basket.length; i++) {
total = total + this.basket[i].quantity
}
return total
};
return {
basket: basket,
find: find,
add: add,
count: count
};
})();
APP.count() /* works */
APP.add() /* returns this.basket as undefined */
答案 0 :(得分:1)
问题来自find(item)
函数中add
的调用。
调用find
这样的函数不会将APP
对象的上下文用作this
,因此this.basket
将是未定义的。
您可以使用简单的this
console.log(this)
的内容
因此,如果您想使用APP的上下文调用find
函数,请在add
函数中调用this.find(item)
答案 1 :(得分:0)
当您通过add()调用find方法时,问题出在 this 引用
f<int>
&#13;
此关键字指的是窗口对象
尝试以下是运行代码
add = function(item) {
var itemFound = find(item)
},
&#13;