【问题标题】:Private variables and access to parent object私有变量和对父对象的访问
【发布时间】:2012-03-02 08:55:49
【问题描述】:

我想要一个包含子对象 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 中的私有变量的新手。

【问题讨论】:

    标签: javascript closures this private


    【解决方案1】:

    一个非常简单的方法是:

    M.S = function (V) { // <-- V is declared locally
        var P;
    
        return {
            E: function () {
                // stuff goes here
            }
        };
    }(M);
    

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

    即使M 稍后重新声明,V 仍将指向正确的对象。

    【讨论】:

    • 这非常简单!我最初寻找的是一种使用“this”的方法,但这为我节省了一行代码。 :)
    【解决方案2】:

    这个呢?您在M 的上下文中调用S

    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);
    

    【讨论】:

    • 很好的解决方案,它向我展示了如何解决我试图解决的问题:调用从 M 的上下文创建 S 的函数。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 2016-12-27
    • 2020-12-03
    • 2012-06-04
    • 2011-07-10
    相关资源
    最近更新 更多