用作事件处理程序的Javascript原型函数中'this'的值

aw *_*rud 1 javascript jquery object prototypal-inheritance

我正在尝试在Javascript中使用原型继承.下面我的代码的问题是,当单击按钮并被MyNamespace.MyObj.myEventHandler调用时,值this不是实例MyNamespace.MyObj,而是单击的按钮.

我构建错误的东西(有更好的方法)吗?我可以以某种方式确保这this是对象的实例而不是调用者按钮吗?

var MyNamespace.MyObj = function(myform) {
  this.myform = myform;
  jQuery('.mybutton', this.myform).click(this.myEventHandler);
};

MyNamespace.MyObj.prototype = {
  myEventHandler: function() {
    this.myform.get(0).submit();
  }
};

jQuery(document).ready(function() {
  new MyNamespace.MyObj(jQuery('#myform'));
});
Run Code Online (Sandbox Code Playgroud)

这只是我用来学习原型继承的一个非常愚蠢的例子.我意识到上面代码的实际功能可以简单地在jQuery中完成,或者我可以使用对象文字或模块模式 - 但我真的只是对学习原型继承而不是在此时实现特定函数感兴趣.

CMS*_*CMS 5

有多种方法可以保留this价值,最简单的IMO是:

var MyNamespace.MyObj = function(myform) {
  var instance = this; // store `this`
  this.myform = myform;
  jQuery('.mybutton', this.myform).click(function () {
    instance.myEventHandler(); // use the stored value
  });
};
Run Code Online (Sandbox Code Playgroud)

  • @RenderIn:是的我觉得这是常用的模式,虽然有[其他方式](http://stackoverflow.com/questions/2025789/preserving-a-reference-to-this-in-javascript-prototype-functions) ... (2认同)