javascript - 有关闭问题。似乎无法解决。请指教

标签 javascript prototypejs

我有这个代码:

  _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。但是正如您猜测的那样,两个链接(因为 HashMap 到链接)正在传递要通过的最后一个哈希值(someClass.click_link <- 这里的值,this.item.sublinks[key][innerkey])。

我尝试过使用内部函数等...但有些事情搞砸了。如果我转到“内部函数深度”,则 this.items 返回 undefined

有什么帮助吗?

最佳答案

由于您将 this 作为参数传递,因此您只需为其创建一个参数 - 称之为 _this - 然后您就可以引用到 _this 而不是函数内的 this:

                (function(_this, innerkey){
                  $(innerkey).observe('click', (function(e){
                    Event.stop(e);
                    someClass.click_link( _this.items.sublinks[key][innerkey],false)
                   }));
                 )(this, innerkey);

(还有其他方法,但是上面的似乎是您将 this 作为参数传递时所采用的方法?这是一种完全值得尊敬的方法。)

编辑添加:根据 Rob W 的评论,我编辑了上面的内容,将 innerkey 添加为参数,因为否则内部 函数( e){...} 表达式将引用与外部函数相同的 innerkey 变量 — 该变量作为循环变量,可能会当内部函数实际运行时已经改变。将其作为参数传递会给内部表达式一个新的 innerkey 变量,该变量等于创建内部函数时的 innerkey

关于javascript - 有关闭问题。似乎无法解决。请指教,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9846921/

相关文章:

javascript - TypeError : this. state.posts.map 在将状态设置为数组时不是函数

javascript - 动态插入第三方的 javascript 广告代码不会在 div 中居中吗?

javascript - Script.aculo.us IE 中的可排序 onUpdate 问题

javascript - Prototype.js 类系统的替代品

javascript - 如何在 javascript 中填充 Angularjs $scope 变量?

javascript - 如何在 javascript 中捕获浏览器的后退/前进按钮单击事件或哈希更改事件?

javascript - npm 安装错误 "ETXTBSY: text file is busy"

javascript - 客户关系管理 2013 : Global JavaScript

javascript - 隐藏具有相同名称或类的多个标签

Javascript 打开新窗口并加载 _self