对象返回为未定义

时间:2015-07-08 11:57:50

标签: javascript object undefined this

如果我调用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 */

2 个答案:

答案 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 引用

&#13;
&#13;
f<int>
&#13;
&#13;
&#13;

此关键字指的是窗口对象

尝试以下是运行代码

&#13;
&#13;
add = function(item) {
      var itemFound = find(item)
    },
&#13;
&#13;
&#13;