关于javascript:将此参数绑定到命名参数

Bind this argument to named argument

本问题已经有最佳答案,请猛点这里访问。

如果我的代码结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
 Thing.prototype = {

    doSomething: function() {
      $(selector).click(this.handleClick.bind(null, this));
    },

    handleClick: function(self, event) {
      console.log(this); //Window
      console.log(self); //Thing
    }

 }

如何将 Thing this 上下文绑定到 self 参数,并且仍然保持 this 对象的行为,就好像没有使用 bind 方法绑定参数一样?

注意:我知道我可以绑定 this 并使用 e.originalEvent.target 来获得我想要的行为,但我只是好奇是否还有其他方法

我希望我能完成我想要实现的目标,如果有任何不明确的地方,请发表评论。


How could one bind the Thing this context to the self argument and still keep the behavior of the this object as if no arguments were bound using the bind method?

您不会为此使用 bind,因为您希望 this 是动态的。而是:

1
2
3
4
5
6
doSomething: function() {
  var self = this;
  $(selector).click(function(e) {
      return self.handleClick.call(this, self, e);
  });
},

handleClick 期间,this 将引用被点击的元素,第一个参数是 Thing 实例,第二个参数是事件:

1
2
3
4
5
handleClick: function(self, event) {
  console.log(this);  // The clicked element
  console.log(self);  // The Thing
  console.log(event); // The event
}