揭示模块模式(JavaScript) - 这无法访问私有方法

revealing module pattern (javascript) - this cannot access private methods

本文关键字:访问 有方法 模块 模式 JavaScript      更新时间:2023-09-26

:I有一个用"揭示模块模式"编写的 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,
         };
} ();

正如你在"methodB"中的"this"中看到的,它不识别类的私有方法。

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

methodA.call(this, "a");
首先,

您在

return {
    methodB = methodB,
    methodC = methodC,
}

它应该是

 return {
    methodB : methodB,
    methodC : methodC
}

在您的示例中,您有

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

that=this和关键字 this 引用当前对象,并且您返回了一个带有 methodBmethodC 的对象,但在您的对象中您没有methodA所以that.methodA("a")methodB内不起作用methodA因为它不是当前对象的一部分,但如果你写成这样

methodB = function (data) {
    methodA("a");
}

然后它就会运行。

that=thisthis=myObjectmyObject只有两种方法methodBmethodC,所以that.methodA("a")这意味着myObject.methodA("a")不应该运行,因为它在myObject中不存在

演示

-1演示-2