Singleton Access私有方法访问公共方法

时间:2013-11-25 11:55:22

标签: javascript design-patterns singleton

我创建了一个单独的类,但是从私有方法访问公共方法时遇到了一些麻烦。我的例子是:

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();

看来范围完全不同。我应该以不同的方式创建一个单身人士吗?

2 个答案:

答案 0 :(得分:1)

那么为什么你不想使用这样的东西:

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

    };

};
...

答案 1 :(得分:1)

请勿使用其他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();