簡體   English   中英

JavaScript私有內部方法可訪問特定的匿名函數

[英]JavaScript private inner method give access to specific anonymous function

我的問題陳述如下,我有一組匿名javascript函數,如下所示,其中一個匿名者是主要家伙(爸爸函數),他通過將函數附加到窗口中公開了某種由其他函數(子函數)使用的API賓語。

//Example papa function

   (function(window,console){
          console.log('I am Papa'); 
          //I do other stuff too
          window.PAPA= {
              getAdvice : function() {
                      console.log('Work hard');
              },
              getHelp : function() {
                      console.log('Give Help');
              },
              getMoney : function() {
                      console.log('1$');
              }
          }
   })(window,console);

//Example Child function
(function(){
          console.log('I am Child'); 
          if ( !PAPA )
               return;

          //use PAPA functions as required
   })();

我只想向特殊的孩子公開“ getMoney”功能,而不是每個孩子都應該可以使用getMoney。

我相信應該有辦法將一些getMoney函數的私有引用傳遞給特殊的子函數。 任何幫助,將不勝感激。

注意:如果我找到更好的詞來描述這個問題,我將重命名該問題。

您可以使用Revealing模塊模式來公開Public API並從其他模塊中使用它。

 //Example papa function var papa = (function(){ console.log('I am Papa'); //I do other stuff too getAdvice : function() { console.log('Work hard'); }, getHelp : function() { console.log('Give Help'); }, getMoney : function() { console.log('1$'); } return { getAdvice: getAdvice, getHelp: getHelp, getMoney: getMoney } })(); //Example Child function var child = (function(papa){ console.log('I am Child'); //use PAPA functions as required papa.getAdvice(); })(papa); 

這就是所謂的“顯示模塊模式”,這意味着如果您調用將方法添加到返回對象中(此方法公開),則意味着您可以使用,但不能訪問。

var PapaModule = ( function( window, undefined ) {

    function getAdvice() {
        console.log('Work hard');
    }

    function getHelp() {
        console.log('Give Help');
    }

    function getMoney() {
        console.log('1$');
    }

    // explicitly return public methods when this object is instantiated
    return {
        getMoney : getMoney,
        someOtherMethod : myOtherMethod
    };

} )( window );


//  example usage
PapaModule.getMoney(); // console.log Work hard
PapaModule.getHelp(); // undefined
PapaModule.getAdvice(); // undefined

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM