我已经看到很多类似的问题,但感觉我仍然遗漏了一些东西。我有以下代码:
_setHotKeys: function(values, buttons){
var hotKeyMap = {
target: document,
binding:[]
};
values.forEach(function(value, index){
if(value.hotkey){
this.button = buttons[index];
hotKeyMap.binding.push({
key: value.hotkey,
fn: function(key, event){
this._handleFillInValueButtonToggle(this.button, true);
},
scope: this
});
}
}, this)
var keyMap = new Ext.util.KeyMap(hotKeyMap);
},
在这个函数中,我尝试使用 Ext.js 设置热键。此代码将为 value
中的每个值设置一个热键。数组,但它们都设置为 this.button
到 buttons
中的最后一个按钮大批。我的结论是它正在推送对 this.button
的引用。而不是将值放入数组中,因此随着循环的进行,这个值会发生变化。如何将其设置为推送值而不是引用?
最佳答案
您得出的结论是正确的。
对于循环的每次迭代,您已将 this.button
指定为等于循环索引处的按钮。如果我们把它拆开,它看起来像;
this.button = buttons[0]
this.button = buttons[1]
this.button = buttons[2]
以此类推,直到循环结束。一旦它到达循环的末尾,this.button
就等于数组中的最后一个按钮。因此,当热键事件执行时,它自然会使用对 this.button
的引用,它指向数组中的最后一个按钮。
您应该将按钮[索引] 引用直接传递给您的处理程序,而不是将引用分配给类属性。
...
fn: function(key, event) {
this._handleFillInValueButtonToggle(button[index], true);
}
关于javascript - 在 Javascript 中按值传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38532584/