为什么我的变量undefined在Underscore.js中的每个函数中?
这是我的代码:
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
)的工作原理相当不同。
你可以用两种方法解决这个问题:
使用临时变量来存储上下文:
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);
}
你必须将this
作为_.each
上下文来调用,如下所示:
_.each(texts, function (text) {
this._textArr[text.Key] = text.Value;
}, this);
请参阅http://underscorejs.org/#each的文档
this
在JavaScript中不会像你所期望的那样工作。 阅读这篇文章:http://www.digital-web.com/articles/scope_in_javascript/
简洁版本:
值this
改变每次调用一个函数的时间。 修复,设置另一个变量等this
并引用它
TextClass = function () {
this._textArr = {};
};
TextClass.prototype = {
SetTexts: function (texts) {
var that = this;
for (var i = 0; i < texts.length; i++) {
that._textArr[texts[i].Key] = texts[i].Value;
}
},
GetText: function (key) {
var value = this._textArr[key];
return String.IsNullOrEmpty(value) ? 'N/A' : value;
}
};
链接地址: http://www.djcxy.com/p/94905.html
上一篇: Why is my variable undefined inside the Underscore.js each function?