在调用按钮点击功能时保持此类
问题描述:
从按钮输入点击功能时,有没有办法保持类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.obj
在foo()
。
答
您需要绑定foo
$("#someButton").click(this.foo.bind(this));
,或者使用箭头功能
$("#someButton").click(() => this.foo());
答
你为什么不定义函数foo的参数:
$("#someButton").click(function(){
foo(obj);
});
foo(obj){
// work with obj ...
}
+1
他将如何访问'foo'? –
这样做。这两种方法有什么区别?第二个只是调用函数?为什么不会'()=> this.foo'然后呢? – shinzou
'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()' –