TypeError:无法设置属性";“字符串”;未定义的at字符串的类型(Javascript)

TypeError:无法设置属性";“字符串”;未定义的at字符串的类型(Javascript),javascript,Javascript,我有这个“类”: 我是这样使用它的: var signUpStates = new BooleanAssoc([ "CNPJ", "PASSWORDS", "ADDRESS", "GENERAL_FIELDS", "STATE", "CITY", "SEGMENT", "PRODUCT", "EMAIL", "TERMS" ]); 我不明白为什么会有打字错误。也许是我的思想太“pythonic”。我创

我有这个“类”:

我是这样使用它的:

var signUpStates = new BooleanAssoc([
    "CNPJ", 
    "PASSWORDS", 
    "ADDRESS", 
    "GENERAL_FIELDS", 
    "STATE", 
    "CITY", 
    "SEGMENT", 
    "PRODUCT",
    "EMAIL",
    "TERMS"
]);
我不明白为什么会有打字错误。也许是我的思想太“pythonic”。我创建一个字典(“关联数组”),迭代字符串列表,创建键并相应地分配它们的值。我做错了什么???

这应该可以:

function BooleanAssoc(keyNames) {
    this.assoc = {};
    $.each(keyNames, function(i, val) {
        this.assoc[val] = false;
    }.bind(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;
  });
};

您的
不是您期望的

尝试:

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;
  });
};

我认为这是一个背景问题。在每个
中,此
指的是当前值,而不是类
BooleanAssoc
的上下文

function BooleanAssoc(keyNames) {
    var self = this;
    self.assoc = {};
    $.each(keyNames, function(i, val) {
        self.assoc[val] = false;
    });
};

试试上面的方法。

我认为这是上下文的问题。在每个
中,此
指的是当前值,而不是类
BooleanAssoc
的上下文

function BooleanAssoc(keyNames) {
    var self = this;
    self.assoc = {};
    $.each(keyNames, function(i, val) {
        self.assoc[val] = false;
    });
};

请尝试将回调绑定到
$。每个
绑定到
这个
$。每个(key…(i,val){}.bind(this))
。尝试将回调绑定到
$。每个
绑定到
这个
$。每个(key…(i,val){}.bind(this))