在调用按钮点击功能时保持此类

问题描述:

从按钮输入点击功能时,有没有办法保持类this在调用按钮点击功能时保持此类

例如:

class MyClass extends FooClass{ 

    constructor (obj) { 

    super (obj) 

    this.obj= obj; 

    $("#someButton").click(this.foo); 
    } 

    foo(){ 
    this.obj; // undefined because this is now #someButton and not MyClass 
    } 

但我想访问this.objfoo()

您需要绑定foo

$("#someButton").click(this.foo.bind(this)); 

,或者使用箭头功能

$("#someButton").click(() => this.foo()); 
+0

这样做。这两种方法有什么区别?第二个只是调用函数?为什么不会'()=> this.foo'然后呢? – shinzou

+1

'bind'通过有界的上下文创建新的函数,这是ES5在回调中保持上下文的方式。 '()=> blah'创建新的箭头函数,并在ES201Somthing中引入。他们在某些方面有所不同,但在这种情况下应该工作“相同”https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions “为什么不会'()=> this.foo'工作呢?“ '()=> body'创建新的箭头函数'this.foo',简单地访问'foo' w/o调用。所以你需要'this.foo()' –

你为什么不定义函数foo的参数:

$("#someButton").click(function(){ 
 
    foo(obj); 
 
}); 
 

 

 
foo(obj){ 
 
    // work with obj ... 
 
}

+1

他将如何访问'foo'? –