Javascript 私有变量和对父对象的访问

Javascript 私有变量和对父对象的访问,javascript,closures,this,private,Javascript,Closures,This,Private,我想要一个主对象M包含一个子对象S,它有一个方法E,它有一个私有变量p。我还想要方法E通过另一个变量V访问M。对于私有变量,我这样做: M.S = function () { var P, V; // how to set V to M? return { E: function () { // stuff goes here } } }(); 我提出的一个解决方案是删除最后一行的()函数,然后调

我想要一个主对象M包含一个子对象S,它有一个方法E,它有一个私有变量p。我还想要方法E通过另一个变量V访问M。对于私有变量,我这样做:

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

    return {
        E: function () {
            // stuff goes here
        }
    }
}();
我提出的一个解决方案是删除最后一行的()函数,然后调用匿名S-creating函数作为M的方法。这解决了问题,但我认为可能有一种更优雅的方法

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

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

主要是我需要知道什么是好的实践,因为我不熟悉Javascript中的私有变量。

这是怎么回事?在
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

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 = function (V) { // <-- V is declared locally
    var P;

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

M.S=function(V){/一个非常简单的方法是:

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

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

M.S=function(V){//这非常简单!我最初寻找的是一种使用“This”的方法,但这为我节省了一行代码。:)这非常简单!我最初寻找的是一种使用“This”的方法,但这为我节省了一行代码。:)伟大的解决方案,它向我展示了如何解决我试图解决的问题:从M的上下文调用创建S的函数。谢谢!伟大的解决方案,它向我展示了如何解决我试图解决的问题:从M的上下文调用创建S的函数。谢谢!