Javascript 对此的引用不起作用

Javascript 对此的引用不起作用,javascript,Javascript,我有下面一段定义单例的代码: var S = (function() { this._enabled = false; this.initialize = function() { this._doit(); }; this._doit = function() { this._enabled = true; }; // Exporting return { Initialize: th

我有下面一段定义单例的代码:

var S = (function() {
    this._enabled = false;

    this.initialize = function() {
        this._doit();
    };

    this._doit = function() {
        this._enabled = true;
    };

    // Exporting
    return {
        Initialize: this.initialize
    };
})();
我呼吁:

S.Initialize();
得到这个:

“this.\u doit”不是一个函数

如果我只是在
初始化中调用
\u doit()
,那么就可以了。。。但是我想我确实设置了
这个
以便在我的类中跨元素使用


我做错了什么?谢谢

,因为您在构建时返回了一个包含Initialize的对象,指向
的Initialize函数,该函数可能是
窗口

您要执行以下操作:

var S = (function() {
  return {
    _enabled  : false,

    Initialize  : function() {
      this._doit();
    },
    _doit  : function() {
      this._enabled = true;
    }
  };
})();

S.Initialize();
这是一件非常非常不同的事情

编辑:如果你想保持
\u doit()
真正的隐私,你可以改为写:

var S = (function() {
  var s = {
    _enabled  : false,

    initialize  : function() {
      _doit();
    },
  };

  var _doit  : function() {
      s._enabled = true;
  };
  return s;
})();

s
成为对象的公共面,函数的闭包成为私有面。

因为在构建时,您返回一个包含Initialize的对象,该对象指向
的Initialize函数,可能是
窗口

您要执行以下操作:

var S = (function() {
  return {
    _enabled  : false,

    Initialize  : function() {
      this._doit();
    },
    _doit  : function() {
      this._enabled = true;
    }
  };
})();

S.Initialize();
这是一件非常非常不同的事情

编辑:如果你想保持
\u doit()
真正的隐私,你可以改为写:

var S = (function() {
  var s = {
    _enabled  : false,

    initialize  : function() {
      _doit();
    },
  };

  var _doit  : function() {
      s._enabled = true;
  };
  return s;
})();
s
成为对象的公共面,函数的闭包成为私有面。

内部

this.initialize = function() {
    this._doit();
};
指的是
初始化
对象,因此您要做的是:
this.initialize.\u doit()
,它不存在

尝试将此
上下文保存到局部变量并使用该变量

var S = (function() {
    var _this = this;
    this._enabled = false;

    this.initialize = function() {
        _this._doit();
    };

    this._doit = function() {
        _this._enabled = true;
    };

    // Exporting
    return {
        Initialize: this.initialize
    };
})();
里面

this.initialize = function() {
    this._doit();
};
指的是
初始化
对象,因此您要做的是:
this.initialize.\u doit()
,它不存在

尝试将此
上下文保存到局部变量并使用该变量

var S = (function() {
    var _this = this;
    this._enabled = false;

    this.initialize = function() {
        _this._doit();
    };

    this._doit = function() {
        _this._enabled = true;
    };

    // Exporting
    return {
        Initialize: this.initialize
    };
})();

对于您在这里所做的事情,我将完全避免使用
,例如:

var S = (function() {
    var _enabled = false;

    function initialize() {
        _doit();
    };

    function _doit() {
        _enabled = true;
    };

    // Exporting
    return {
        Initialize: initialize
    };
})();
因为您没有使用
new
关键字,
this
指的是
窗口
对象(或者在严格模式下,它指的是
未定义的
)。另一种选择是使用
新函数()
,例如:

var S = new function() {
    this._enabled = false;

    this.initialize = function() {
        this._doit();
    };

    this._doit = function() {
        this._enabled = true;
    };
};

S.initialize();

对于您在这里所做的事情,我将完全避免使用
,例如:

var S = (function() {
    var _enabled = false;

    function initialize() {
        _doit();
    };

    function _doit() {
        _enabled = true;
    };

    // Exporting
    return {
        Initialize: initialize
    };
})();
因为您没有使用
new
关键字,
this
指的是
窗口
对象(或者在严格模式下,它指的是
未定义的
)。另一种选择是使用
新函数()
,例如:

var S = new function() {
    this._enabled = false;

    this.initialize = function() {
        this._doit();
    };

    this._doit = function() {
        this._enabled = true;
    };
};

S.initialize();

别名为
\u此
在此处没有帮助,因为
指的是
窗口
。为了使
这个
正确工作,您需要使用
新的
关键字,或者将所有内容放入对象文本中,如@Malvolio的回答所示。否则,您将在
窗口
对象上设置全局属性!将
别名为
\u此
在此处没有帮助,因为
指的是
窗口
。为了使
这个
正确工作,您需要使用
新的
关键字,或者将所有内容放入对象文本中,如@Malvolio的回答所示。否则,您将在
窗口
对象上设置全局属性!如果我想让
\u doit
私有怎么办?如果我想让
\u doit
私有怎么办?好吧,如果我想让
\u doit
私有怎么办?在我的第一个示例中,除了“Initialize”方法之外的所有方法都是私有的。好吧,如果我想让
\u doit
私有怎么办?在我的第一个示例中,除“Initialize”方法外的所有方法都是私有的。