2014-05-24 41 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); 

    } 

})();