【问题标题】:Javascript: Revealing Module Pattern. Access private membersJavascript:揭示模块模式。访问私人成员
【发布时间】:2015-10-03 04:51:00
【问题描述】:

我有一个 javascript 库使用“显示模块模式”公开其成员。我有一个特殊的需要,我需要访问它的私人会员。有人可以在这方面帮助我吗?有什么提示和技巧吗?如果有人能对此有所了解,我将不胜感激。提前致谢。

Revealing Module Pattern by Addy Osmani

var myRevealingModule = (function () {

    var privateVar = "Ben Cherry",
        publicVar = "Hey there!";

    function privateFunction() {
        console.log( "Name: " + privateVar );
    }

    function publicSetName( strName ) {
        privateVar = strName;
    }

    function publicGetName() {
        privateFunction();
    }


    // Reveal public pointers to
    // private functions and properties

    return {
        setName: publicSetName,
        greeting: publicVar,
        getName: publicGetName
    };

})();

myRevealingModule.setName( "Paul Kinlan" );
myRevealingModule.getName();

// is there anyway to access 'privateFunction'????

有没有办法访问'privateFunction'????

任何提示和技巧?如果有人能对此有所了解,我将不胜感激。提前致谢。

【问题讨论】:

    标签: javascript class revealing-module-pattern


    【解决方案1】:

    您创建myRevealingModule 的对象,其中包含setNamegreetinggetName。从这些,setName 引用 publicSetNamegetName 引用 publicGetName。反过来,publicGetName 完全可以满足您的需求:调用 privateFunction

    所以,回答你的问题:

    myRevealingModule.publicGetName();
    

    是您访问privateFunction 的方式。您甚至可以通过这种方式更改privateVar 的值:

    myRevealingModule.publicSetName("foobar");
    myRevealingModule.publicGetName();
    

    【讨论】:

    • 正如我在描述中提到的,类方法是从第 3 方库中公开的。无论如何我可以在哪里调用privateFunction()?像这样myRevealingModule.privateFunction()
    • 据我所知,没有办法,除非你做一个反射,但你需要一个原型。 (htmlgoodies.com/tutorials/web_graphics/…)。你为什么不喜欢调用 publicGetName?
    • 其实上面的myRevealingModule类的实现只是一个例子。 js 库的实际实现是不同的。无论如何感谢@Lajos Arpad。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    相关资源
    最近更新 更多