Javascript JS:从封闭函数中访问对象中的数据时出现问题

Javascript JS:从封闭函数中访问对象中的数据时出现问题,javascript,function,javascript-objects,Javascript,Function,Javascript Objects,我想用这个关键字引用对象内部的内容。 我希望所有数据都在一个对象中。 现在我问自己如何从其他函数中访问数据 我不知道 var编写器={ currentChordType:[], setChordType:函数(){ this.currentChordType=[5,4]; }, getNextChord:function(){ var指数=数学地板(数学随机()*3); 开关(索引){ 案例(0): { 开关(此.currentChordType[0]){ /*更多代码*/ } } /*更多代

我想用这个关键字引用对象内部的内容。 我希望所有数据都在一个对象中。 现在我问自己如何从其他函数中访问数据

我不知道

var编写器={
currentChordType:[],
setChordType:函数(){
this.currentChordType=[5,4];
},
getNextChord:function(){
var指数=数学地板(数学随机()*3);
开关(索引){
案例(0):
{
开关(此.currentChordType[0]){
/*更多代码*/
}
}
/*更多代码*/
}
}
}
composer.setChordType();

composer.getNextChord()
开关
语句中,作用域似乎变得一团糟。开发人员通常通过将
这个
赋值给另一个变量,然后在其他地方访问它来保留作用域。所以试试这个

 getNextChord: function() {
    var that = this;
    var index = Math.floor(Math.random() * 3);
    switch (index) {
      case (0):
        {
          switch (that.currentChordType[0]) {
            /* more code .... */
          }
        }
        /* more code .... */
    }
  }
我敢打赌,你没有提供给我们的真实的、实际的、破坏性的代码会像button.addEventListener(“click”,composer.getNextChord)
或类似的回调。在这种情况下,需要将方法绑定到composer对象

定义编写器后,将方法绑定到它:

var composer = {
   ...
   getNextChord: function() { ... }
};

// Add this bit:
composer.getNextChord = composer.getNextChord.bind(composer);

该代码不会抛出该错误。您需要提供一个实际演示问题的示例。您的代码正在运行:您完全正确。非常感谢。这对我来说并不明显。但是
.bind()
是如何工作的呢?我可以简单地说,
.bind()
设置函数调用时的上下文。大多数时候你不需要使用它。但是,每当函数作为回调传递时,我会说10次中有7.3次您需要将其绑定到正确的上下文,以便在调用时,
这就是您所期望的。