私有变量和父对象的访问权限

时间:2012-02-09 20:43:52

标签: javascript closures this private

我想要一个包含子对象S的主对象M,它有一些方法E,它有一个私有变量P.我也希望方法E可以通过另一个变量V访问M.对于私有变量我是这样做:

M.S = function () {
    var P,
        V; // how to set V to M?

    return {
        E: function () {
            // stuff goes here
        }
    }
}();

我提出的一个解决方案是删除最后一行的(),然后调用匿名S创建函数作为M的方法。这解决了问题,但我想可能还有更多优雅的方式来解决它。

M.S = function () {
    var P,
        V = this;

    return {
        E: function () {
            // stuff goes here
        }
    }
};
M.S = M.S()

大多数情况下,我需要知道这是什么好习惯,因为我是Javascript中私有变量的新手。

2 个答案:

答案 0 :(得分:3)

执行此操作的一种非常简单的方法是:

M.S = function (V) { // <-- V is declared locally
    var P;

    return {
        E: function () {
            // stuff goes here
        }
    };
}(M);

V通过形式参数在本地声明。 M的引用已分配到V,通过function(V){...}(M);

即使稍后重新宣布MV仍会指向正确的对象。

答案 1 :(得分:1)

这个怎么样?您在S

的上下文中调用M
M.S = function () {
    var P,
        V = this; // how to set V to M?

    return {
        E: function () {
            // stuff goes here
            // you can refer M via V reference
        }
    }
}.call(M);