无法访问javascript中的成员

时间:2011-06-08 15:25:41

标签: javascript closures private-members

我在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()的调用不可用。我可以理解这是范围的问题,但是,无论如何都要解决我的需要。

2 个答案:

答案 0 :(得分: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])

答案 1 :(得分:0)

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

然后只是覆盖this.before。