2012-02-09 67 views
1

我想要一個包含子對象S的主對象S,它具有某個方法E,它具有一個私有變量P.我還希望方法E通過另一個變量V訪問M.對於私有變量我這樣做:私有變量和對父對象的訪問

M.S = function() { 
    var P, 
     V; // how to set V to M? 

    return { 
     E: function() { 
      // stuff goes here 
     } 
    } 
}(); 

一個解決方案,我想出了是在最後一行刪除(),然後調用匿名S-創建功能M.這種的方法解決了這個問題,但我認爲可能有一種更優雅的方式去實現它。

M.S = function() { 
    var P, 
     V = this; 

    return { 
     E: function() { 
      // stuff goes here 
     } 
    } 
}; 
M.S = M.S() 

大多數情況下,我需要知道什麼是良好的做法,因爲我是新來的私人變量在Javascript中。

回答

3

一個非常簡單的方法來做到這一點:

M.S = function (V) { // <-- V is declared locally 
    var P; 

    return { 
     E: function() { 
      // stuff goes here 
     } 
    }; 
}(M); 

V通過形式參數局部聲明。 M的參考文獻被分配到V,通過function(V){...}(M);

即使當M被重新宣佈後,V仍然會指向正確的對象。

+0

這非常簡單!我最初尋找的是使用「this」來實現它的一種方式,但是這爲我節省了一行代碼。 :) – Reason 2012-02-09 20:57:46

1

這是怎麼回事?您在M情況下調用S

M.S = function() { 
    var P, 
     V = this; // how to set V to M? 

    return { 
     E: function() { 
      // stuff goes here 
      // you can refer M via V reference 
     } 
    } 
}.call(M); 
+0

偉大的解決方案,它向我展示瞭如何解決我試圖解決的問題:從M的上下文中調用創建S的函數。謝謝! – Reason 2012-02-09 20:59:37