2012-01-16 21 views
0

我有封閉樹:'A'包含私人關閉'pancake'和'B'。我需要從'B'公共職能內部打電話,'A'' - '煎餅'的私人關閉並檢索其公共功能。我該怎麼做?哦,這是無用的,因爲這不是一個對象。使用Javascript訪問嵌套關閉公共函數而不使用'this'

我的代碼:

var A = (function() { 
    var pancake = (function() { 
     return { 
      numeric: 142 
     }; 
    })(A); 

    var B = (function() { 
     return { 
      init: function(name) {     
       console.log(pancake.numeric); 
       //How to access the same element using 'name' variable? 
      } 
     }; 
    })(A); 
    return { 
     init: function() { 
      B.init('pancake'); 
     } 
    }; 
})(); 
A.init(); 

的jsfiddle可能會顯示更多的細節:提前

+2

您在初始化之前使用了'A'兩次。 – 2012-01-16 16:37:22

+0

感謝您的注意 – Misiur 2012-01-16 16:42:44

+1

用公共方法將東西變成普通物體。然後,調用所需的公共方法。這裏包含的代碼比要求的複雜得多。除非您公開公開方法,否則不能「調用」私人數據或封閉。 – jfriend00 2012-01-16 16:44:34

回答

1

http://jsfiddle.net/yALkY/3/

感謝。雖然我有jfriend00給定的代碼過於複雜的事情aggree,一個解決辦法是引入一些來存儲參考文件,如:

var A = (function() { 
    var pancake = (function() { 
     return { 
      numeric: 142 
     }; 
    })(); 

    var B = (function() { 
     return { 
      init: function(name) {     
       console.log(privateVars[name].numeric); 
       //How to access the same element using 'name' variable? 
      } 
     }; 
    })(); 

    // added: 
    var privateVars = { 
    pancake: pancake 
    }; 

    return { 
     init: function() { 
      B.init('pancake'); 
     } 
    }; 
})(); 
A.init(); 

當然,缺點是您必須手動維護該列表。