我有这个"课程":
function BooleanAssoc(keyNames) {
this.assoc = {};
$.each(keyNames, function(i, val) {
this.assoc[val] = false;
});
};
我这样用:
var signUpStates = new BooleanAssoc([
"CNPJ",
"PASSWORDS",
"ADDRESS",
"GENERAL_FIELDS",
"STATE",
"CITY",
"SEGMENT",
"PRODUCT",
"EMAIL",
"TERMS"
]);
我不明白为什么会遇到TypeError。也许我的想法也是#pythonic"。我创建了一个字典("关联数组"),我遍历一个字符串列表并创建键并相应地分配它们的值。我做错了什么?
答案 0 :(得分:4)
您的this
不是您期望的this
。
尝试:
function BooleanAssoc(keyNames) {
this.assoc = {};
$.each(keyNames, function(i, val) {
this.assoc[val] = false;
}.bind(this));
};
ES5环境,您也可以使用.forEach
。如果使用ES6,则可以使用不绑定this
的箭头函数并使用父作用域:
function BooleanAssoc(keyNames) {
this.assoc = {};
keyNames.forEach(val => {
this.assoc[val] = false;
});
};
您也可以执行以下操作,但通常认为这不是最佳做法,因为它会不必要地将变量引入范围。但是,如果您在ES3等环境中,并且无法使用填充程序添加ES5功能,则以下内容将起作用:
function BooleanAssoc(keyNames) {
var self = this;
this.assoc = {};
$.each(keyNames, function(i, val) {
self.assoc[val] = false;
});
};
答案 1 :(得分:0)
这应该有效:
function BooleanAssoc(keyNames) {
this.assoc = {};
$.each(keyNames, function(i, val) {
this.assoc[val] = false;
}.bind(this));
};
答案 2 :(得分:0)
我认为这与上下文有关。每个this
内部都是指当前值而不是类BooleanAssoc
的上下文。
function BooleanAssoc(keyNames) {
var self = this;
self.assoc = {};
$.each(keyNames, function(i, val) {
self.assoc[val] = false;
});
};
尝试上面一个。