javascript - 私有(private)变量和访问父对象

标签 javascript closures this private

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

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 中私有(private)变量的新手。

最佳答案

一个非常简单的方法是:

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

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

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

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

关于javascript - 私有(private)变量和访问父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9218459/

相关文章:

javascript - 我可以强制百分比总和为精确值吗?

javascript - 使用 $(this) 查找表单提交按钮

c++ - 构造函数内部 "this"的 dynamic_cast

javascript - 使用 is() 和多个 CSS 类进行 JQuery 验证

Javascript函数有什么区别吗?

javascript - Nodejs : Cannot find module error while trying to require unirest module

javascript - 在 Foreach 循环 JS 中调用 Async 方法

jenkins - JenkinsFile groovy 中的闭包 - 回调或委托(delegate)

python-2.7 - Mincemeat:提供额外的参数来映射和减少带有闭包的函数

javascript - 如何(最好)在作为回调传递的对象方法中访问 'this'