2011-06-08 73 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。