我有以下代码:
_trackit: function(){
for(var key in this.items.sublinks){
switch(key){
case 'shoes':
for(var innerkey in this.items.sublinks[key]){
(function(){
$(innerkey).observe('click', (function(e){
Event.stop(e);
someClass.click_link( this.items.sublinks[key][innerkey],false)
}));
)(this);
}
break;
}
}
}
我传入的哈希值的大小为2。但是,您可能会猜到这两个链接(因为哈希映射到链接)正在传递最后一个要通过的哈希值(在这里,
someClass.click_link
this.item.sublinks[key][innerkey])。我试过使用内部功能等...但是有些东西弄乱了。如果我转到“内部函数深层”,则
this.items
返回undefined
。有什么帮助吗?
最佳答案
正如其他人提到的那样,您需要有一个参数来接收您正在传递的“ this”。您还需要传递“ key”和“ innerkey”变量的副本,以避免for循环内的闭包错误。
var make_event_listener = function(that, key, innerKey){
return function(e){
Event.stop(e);
someClass.click_link( that.items.sublinks[key][innerkey], false)
};
};
//...
for(var innerkey in this.items.sublinks[key]){
$(innerkey).observe('click', make_event_listener(this, key, innerKey) );
}
//...
当然,您可以改用匿名版本的make_event_listener,但我发现这种方式更具可读性。