javascript - 单例访问私有(private)方法访问公共(public)方法

标签 javascript design-patterns singleton

我已经创建了一个类,但是我在从私有(private)方法访问公共(public)方法时遇到了一些问题。我的例子是这样的:

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

    };

};
...

关于javascript - 单例访问私有(private)方法访问公共(public)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20192452/

相关文章:

javascript - 在 Backbone JS 中保持跨页面重新加载 session

design-patterns - 数据属性表 vs 许多小表

design-patterns - 如何使用 memento 设计模式保存多个对象的状态?

添加 ImageLoader 时 getInstance(this) 中的 Android Volley 错误

javascript - 错误 [预处理] : Can not load "webpack"! (webpack@2.2.1; karma@1.4.1)

javascript - Ember.js CollectionView 命令

php - 静态类与单例类如何工作(数据库)

c++ - 单例:应该如何使用

javascript - 将文件转换为数组然后输出对象值时遇到问题

c++ - 将 Lua 绑定(bind)胶水代​​码与我的游戏引擎的其余部分隔离开来