这是我的代码:

TextClass = function () {
    this._textArr = {};
};

TextClass.prototype = {
    SetTexts: function (texts) {
        for (var i = 0; i < texts.length; i++) {
            this._textArr[texts[i].Key] = texts[i].Value;
        }
    },
    GetText: function (key) {
        var value = this._textArr[key];
        return String.IsNullOrEmpty(value) ? 'N/A' : value;
    }
};

我正在使用Underscore.js库,并想这样定义我的SetTexts函数:
_.each(texts, function (text) {
    this._textArr[text.Key] = text.Value;
});

但是当我进入循环时,_textArr是未定义的。

最佳答案

在JavaScript中,称为this的函数上下文可用于rather differently

您可以通过两种方式解决此问题:

  • 使用一个临时变量来存储上下文:
    SetTexts: function (texts) {
      var that = this;
      _.each(texts, function (text) {
        that._textArr[text.Key] = text.Value;
      });
    }
    
  • 使用第三个参数 _.each() 传递上下文:
    SetTexts: function (texts) {
      _.each(texts, function (text) {
        this._textArr[text.Key] = text.Value;
      }, this);
    }
    
  • 10-06 15:18