我有以下代码:

  _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,但我发现这种方式更具可读性。

09-25 16:10