Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从拥抱包装中引用新实例“this”?_Javascript_This_New Operator - Fatal编程技术网

Javascript 如何从拥抱包装中引用新实例“this”?

Javascript 如何从拥抱包装中引用新实例“this”?,javascript,this,new-operator,Javascript,This,New Operator,我想了解在特定情况下如何引用这个,比如在“模块包装器”中包含一个“类” 看看这个例子: var MyClass = (function() { theClass = function() { // Position A this.myValue = 3; // some number. }; theClass.prototype.initSomething = function() { // Position B $(someBut

我想了解在特定情况下如何引用
这个
,比如在“模块包装器”中包含一个“类”

看看这个例子:

var MyClass = (function() {

  theClass = function() {
      // Position A
      this.myValue = 3; // some number.
  };

  theClass.prototype.initSomething = function() {
      // Position B
      $(someButton).on('click', this.myCallback);
  };

  theClass.prototype.myCallback = function(event) {
      // Position C
      console.log(??this??.someValue);
  }.bind( ????? /* Position D */);

  return theClass;
})();

var myObject = new MyClass();
myObject.initSomething();
如果我创建类的新instance,则在位置a
处,此
指的是新创建的对象。没关系

在位置B处,
仍指新创建的对象。那还可以


我想解决的问题发生在位置C,其中
将指向按钮。因此,我想将
myCallback()
绑定到新创建的对象。但是,在位置D,我在新创建的实例之外。但我知道原始对象和原型以及更多。那么,我如何引用新创建的对象呢?

您正在犯思维错误

位置D仅运行一次。这可能是在页面加载之后发生的

但是这里有很多不同的
指针。每个
new()
都将创建一个新实例和一个新的
指针

如果试图在包装函数中存储新的
指针,则需要管理指针列表

优雅的方法是在新实例化的对象中组织所有绑定,其中包含这些信息。像这样:

var MyClass = (function() {

  theClass = function() {
      // Position A
      this.myValue = 3; // some number.
  };

  theClass.prototype.initSomething = function() {
      // Position B
      var myBoundCallback = this.myCallback.bind(this);
      $(someButton).on('click', myBoundCallback);
  };

  theClass.prototype.myCallback = function(event) {
      // Position C: this is now the newly instanciated object as it was bound at position B.
      console.log(this.someValue);
  };

  return theClass;
})();

var myObject = new MyClass();
myObject.initSomething(); 

谢谢@deceze的帮助编辑。这与
这个
关键字的工作方式无关。这是关于识别它的边界。