Javascript单例:如何访问私有变量?

我有这个单身人士.公共函数允许设置私有变量,但是我无法以在私有方法中使用它们的方式来设置它们:

var ServiceInterface = (function () {
  // Instance stores a reference to the Singleton
  var instance;

  function init() {
    // Singleton
    // Private methods and variables
    var m_action;

    function performAction() {
      alert(m_action);
    }

    return {
      // Public methods and variables
      callBackend: function (sAction) {
        m_action = sAction;
      }
    };
  };
})

m_action在整个单例的公共和私有部分中不可用.我究竟做错了什么?

解决方法:

我想你指的是这个

var ServiceInterface = (function () {
    var m_action;

    function performAction() {
      alert(m_action);
    }

    return {
      // Public methods and variables
      callBackend: function (sAction) {
        m_action = sAction;
        performAction();
      }
    };
})()

ServiceInterface.callBackend("Hello world");

您需要执行匿名功能.运行它可以创建用匿名函数定义的变量和函数,而这些变量和函数在外部看不到.大多数js库都使用此约定来创建模块并避免感染全局范围

var ServiceInterface = (function () {
   // code inside 
})()

这些是限制在匿名函数执行范围内的变量和函数

// var ServiceInterface = (function () {
    var m_action;

    function performAction() {
      alert(m_action);
    }

// })()

最后,返回一个javascript对象,该对象将公开可在匿名函数范围之外访问的函数

//var ServiceInterface = (function () {
//  var m_action;
//    
//  function performAction() {
//       alert(m_action);
//  }

    return {
      // Public methods and variables
      callBackend: function (sAction) {
        m_action = sAction;
        performAction();
      }
    };
//})()

但是,为什么要为单例创建私有变量和方法呢?

上一篇:python-复合类型和标量类型的生存期有什么区别?


下一篇:PHP-如何全局使用vbulletin变量?