揭示模块模式(javascript) - 这不能访问私有方法

时间:2012-06-17 15:28:30

标签: javascript oop design-patterns revealing-module-pattern

:我有一个用'揭示模块模式'编写的javascript类:

myObject = function () {
    var varA,
        varB,

        methodA = function (data) {

            //Some code...
        },
        methodB = function (data) {
             var that = this;
             that.methodA("a"); // --> 'that' recognize only public methods: 'methodB' / 'methodC' !!!
        },
        methodC = function (data) {

        };
        return {
            methodB : methodB,
            methodC : methodC,
         };
} ();

正如你在'this'中看到的那样,'method''不能识别类的私有方法。

修改 我的目的是从公共类调用辅助私有方法。在这个私人课程中,我需要'这个'。如果我直接从'methodB'调用'methodA(“a”)'(没有'that')我没有'this'('this'将是全局上下文)。解决方案将是:

methodA.call(this, "a");

1 个答案:

答案 0 :(得分:4)

首先,你有错误

return {
    methodB = methodB,
    methodC = methodC,
}

应该是

 return {
    methodB : methodB,
    methodC : methodC
}

在您的示例中,您有

methodB = function (data) {
         var that = this;
         that.methodA("a");
    }

that=this并且关键字this引用当前对象,并且您返回了一个包含methodBmethodC的对象,但在您的对象中您没有{{1}所以methodAthat.methodA("a")内部无法正常工作,因为methodB不是您当前对象的一部分,但如果您写的是

methodA

然后它就会运行。

methodB = function (data) { methodA("a"); } that=this以及this=myObject只有myObjectmethodB两种方法methodC,这意味着that.methodA("a")不应该因为它在myObject.methodA("a")

中不存在而运行

DEMO-1DEMO-2