javascript - 在闭包中访问类成员

标签 javascript jquery

我在这个方法中有一个类方法和一个闭包。我如何从闭包中访问类成员?

Person = function(x) {
  this.x = x;
}

Person.prototype = {
   myMethod: function() {
      $('#myBtn').click( function() {
         // how to access to this.x? the this reference points in another context 
      });
   }
}

最佳答案

使用Function.prototype.bind会在这里帮助你

Person = function(x) {
  this.x = x;
}

Person.prototype.myMethod = function() {
  $('#myBtn').click(function() {
    this.x;
  }.bind(this));
};

你也可以在这里使用一些更好的代码分离

Person = function(x) {
  this.x = x;
};

Person.prototype.myMethod = function {
  $('#myBtn').click(this.clickHandler.bind(this));
};

Person.prototype.clickHandler = function(event) {
  console.log(this.x);
};

注意如果您想支持旧版浏览器,请查看es5-shim


编辑

我将在大约 6 个月后重新访问它,我可能会以不同的方式编写上面的代码。我喜欢这里的私有(private)/公开曝光。此外,不需要任何奇特的绑定(bind)或类似的东西 ^.^

function Person(x, $button) {

  // private api
  function onClick(event) {
    console.log(x);
  }

  function myMethod() {
    $button.click();
  }

  // exports
  this.x        = x;
  this.myMethod = myMethod;

  // init
  $button.click(onClick);
}

var b = $("#myBtn"),
    p = new Person("foo", b);

p.x;          // "foo"
p.myMethod(); // "foo"
btn.click();  // "foo"

关于javascript - 在闭包中访问类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18561620/

相关文章:

javascript - 是否可以在 alert() 对话框中显示上标字符?

javascript - 如何通过类名获取元素?

javascript - 固定水平 slider 间距的简单方法

javascript - 无法使用 javascript 解决 No 'Access-Control-Allow-Origin' 错误

javascript - 显示加载程序等待文件加载

javascript - 从 Electron 主脚本触发点击

javascript:iPhone 选择滚轮导致页面在触摸下拉列表时滚动到顶部

javascript - 循环遍历 JSON 文件,添加元素然后保存到新文件

javascript - 在 React.js 中使用 this.props 和 props 有什么区别?

javascript - 单击按钮几次使游戏运行得越来越快 - javascript