我在javascript中定义了一个类
Class = (function() {
var privateFunction = function() { return "private"; }
return { publicFunction: function() { return privateFunction("public"); } };
)();
此处用户可以访问 Class.publicFunction ,但不能访问 Class.privateFunction 。
现在我想为用户提供扩展此类的接口。所以我添加了一个公共函数extend。
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]
}
};
)();
我的目标是使用extend属性如下
Class.extend({
someFunc: function() { return privateFunction("hooray"); }
});
并以
的形式访问它 Class.someFunc()
我遇到的问题是扩展函数 someFunc 中对 privateFunction()的调用不可用。我可以理解这是范围的问题,但是,无论如何都要解决我的需要。
答案 0 :(得分:0)
虽然这是对封装的可怕违反,但您可以通过将要添加的函数作为字符串传递并在eval
中extend
来执行您所描述的内容:
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])
答案 1 :(得分:0)
this.before = function(){return "public"};
this.publicFucntion = function(){privateFunction(this.before());}
然后只是覆盖this.before。