2011-06-08 78 views
0

我定義在JavaScript類如無法訪問成員的JavaScript

Class = (function() { 
    var privateFunction = function() { return "private"; } 
    return { publicFunction: function() { return privateFunction("public"); } }; 
    )(); 

在這裏用戶可以訪問Class.publicFunction,但不Class.privateFunction

現在我想爲用戶提供一個接口來擴展這個類。所以我添加了一個公共函數擴展。

Class = (function() { 
      var privateFunction = function() { return "private"; } 
      return { 
        publicFunction: function() { return privateFunction("public"); } 
        extend: function(source) { 
          dest=this; 
          for(var prop in source)dest[prop] = source[prop] 
        } 
      }; 
    )(); 

我的目標是如下

Class.extend({ 
      someFunc: function() { return privateFunction("hooray"); } 
    }); 

和訪問它作爲

Class.someFunc() 

我所面臨的問題是在調用privateFunction()使用擴展屬性擴展功能someFunc不適用於它。我可以理解這是問題的範圍,但是,無論如何要解決我的需要。

回答

0

雖然這是一個可怕的侵犯封裝的,你可以做你的描述通過傳遞荷蘭國際集團它要添加一個字符串的函數和evalextend

Class.extend({ 
     someFunc: 'function() { return privateFunction("hooray"); }' 
}); 

,並在extend功能,改變

     for(var prop in source)dest[prop] = source[prop] 

     for(var prop in source)dest[prop] = eval(source[prop]) 
+0

感謝您想法 我用它作爲 '爲(在源VAR丙)DEST [丙] = EVAL( 「溫度=」 +字符串(源[丙]));' – 2011-06-08 15:58:42

+0

將這個給任何問題任何地方。我正在研究Linux。這將是一個在Windows IE中的問題? – 2011-06-08 15:59:38

0
this.before = function(){return "public"}; 
this.publicFucntion = function(){privateFunction(this.before());} 

然後只是覆蓋this.before。