簡體   English   中英

單例訪問私有方法訪問公共方法

[英]Singleton Access Private methods acces public methods

我已經創建了一個類,但是在訪問私有方法中的公共方法時遇到了一些麻煩。 我的例子是這樣的:

var mySingleton = (function () {

  function init() {

    function privateMethod(){
        publicMethod();
        //this.publicMethod() also doesn't work
    }

    privateMethod();

    return {

      publicMethod: function () {
        console.log( "The private method called me!" );
      }
    };
  };

  return {
    getInstance: function () {

      if ( !instance ) {
        instance = init();
      }

      return instance;
    }
  };
})();

var singleton = mySingleton.getInstance();

范圍似乎完全不同。 我應該以其他方式創建單例嗎?

那么為什么不想使用這樣的東西:

var mySingleton = (function () {
    /*private methods*/

    return {
      /*public methods*/
    }
})();

如果您的問題正式提出,您需要像這樣更改代碼

...
function init() {

    function privateMethod(){
        publicMethod();//OK
    }

    privateMethod();

    function publicMethod(){
        console.log( "The private method called me!" );
    }
    return {

        publicMethod: publicMethod

    };

};
...

不要使用該附加的init函數。 並且您將必須訪問instance上的公共方法,即您從init返回的對象。

var mySingleton = (function () {
  var instance = null;
  function privateMethod(){
    instance.publicMethod();
  }

  return {
    getInstance: function () {
      if ( !instance ) {
        instance = {
          publicMethod: function () {
            console.log( "The private method called me!" );
          }
        };
        privateMethod();
      }
      return instance;
    }
  };
})();

var singleton = mySingleton.getInstance();

暫無
暫無

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

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