2014-05-24 42 views
-2

由于我以前的问题没有得到答案,我想我给了它另一个尝试只配制更好。正确的范围引用窗口对象内的对象

(function() { 

    var ns = {}; 

    for(var i = 0; i < 2; i++){ 

     ns['someName'] = 'na' + i; 

     //Logs ns0 and ns1 like i want 
     console.log(ns["someName"]); 

     window.addEventListener('load', function(){ 

      //Logs ns1 twice 
      console.log(ns["someName"]); 


     }); 

    } 



})(); 

所以问题是如何保持正确的范围内的窗口eventListener。 谢谢!

+0

不是这个网站的所有用户都家伙。 –

+0

其一般使用的话对不起,你觉得冒犯 – user3539582

回答

0

您可以使用封

(function(value) { 
    window.addEventListener('load', function(){ 

     //Logs ns1 twice 
     console.log(value); 

    }); 
})(ns["someName"]); 

定义一个内联函数的魔力并把它称为inmediatly使用的当前值ns["someName"]

+0

多德我爱你^^谢谢 – user3539582

+0

@ user3539582:哈哈,很高兴帮助 –

0
(function() { 
    var ns = {}; 
    for(var i = 0; i < 2; i++){ 
     ns['someName'] = 'na' + i; 
     console.log(ns["someName"]); 
     (function(value){ 
      window.addEventListener('load', function(){ 
       console.log(value); 
      }); 
     }(ns['someName'])); 
    } 
})(); 
+0

仍然记录ns1两次队友:( – user3539582

+0

是的,但是纠正了 – mpm

0

我简化了代码来显示如何可以“保存'每个负载回调函数中的范围。您可以使用一个自执行函数返回一个封闭:

(function() { 

    for(var i = 0; i < 2; i++) { 

     window.addEventListener('load', (function(i){ 
      return function(evt) { 
       // i is as expected: 0 and then 1 
       console.log(i); 
       // the variable 'evt' contains the event-object 
      }; 
     })(i)); 

    } 

})(); 
+0

你会失去你的事件引用这个方法已经尝试过了,谢谢! – user3539582

+0

@ user3539582:我更改了代码:只是向返回的闭包中添加一个参数(称为'evt'),并且仍然有事件对象;) – sjkm

0

您可以关闭

(function() { 
    var ns = {}; 
    for(var i = 0; i < 2; i++){ 
     ns['someName'] = 'na' + i; 
     console.log(ns["someName"]); 
     (function(value){ 
      window.addEventListener('load', function(){ 

        return (function(){ 
         console.log(value); 
         })() 
      }); 
     }(ns["someName"])); 
    } 
})(); 

这将这样的伎俩:)

0

谢谢大家的帮助下实现它非常感谢您的意见!我现在已经打了两天了,而且我正要拔出我的头发。

这里是最终代码:

(function() { 

    for(var i = 0; i < 2; i++){ 

    var ns = {}; 

    ns['someName' + i] = 'ns' + i; 

    //Logs ns0 and ns1 like i want 
    console.log(ns); 

    (function(value) { 

     window.addEventListener('load', function(event){ 

      //Logs ns0 and ns1 like i want 
      console.log(value); 

      //preseved my events 
      console.log(event); 

     }); 

    })(ns); 

    } 

})();