Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 保持'的价值;这';使用事件侦听器时_Javascript_Jquery_This_Event Listener - Fatal编程技术网

Javascript 保持'的价值;这';使用事件侦听器时

Javascript 保持'的价值;这';使用事件侦听器时,javascript,jquery,this,event-listener,Javascript,Jquery,This,Event Listener,我有以下功能: onDocumentKeyUp: function (e) { if (e.keyCode === 27) { this.deactivate(); } } 我想这样把它绑起来: $(document).on('keyup', onDocumentKeyUp); 但是,当我这样做时,onDocumentKeyUp函数中的this会引用文档。我通过以下方式解决了这个问题: var self = this; $(document).on('keyup

我有以下功能:

onDocumentKeyUp: function (e) {
    if (e.keyCode === 27) {
       this.deactivate();
    }
}
我想这样把它绑起来:

$(document).on('keyup', onDocumentKeyUp);
但是,当我这样做时,
onDocumentKeyUp
函数中的
this
会引用文档。我通过以下方式解决了这个问题:

var self = this;
$(document).on('keyup', function(e) { self.onDocumentKeyUp(e); });
这是可行的,但有些东西告诉我有一个更干净的方法来解决这个问题。会不会
.call()
.apply()
以某种方式..在这里应用?我仍然不确定这些函数到底是如何工作的


此外,我不必将自己限制在
jQuery.on()
。如果有一种“普通”的方法,请随意教我。

请注意
方法上
数据
参数:
您还可以使用jQuery.proxy方法:

下面是JSFIDLE:

您可以使用它来设置上下文(无需像
call
apply
那样立即调用它):


由于此方法仅受ES5.1兼容浏览器的支持,因此您可以使用它而不是填充它。

您的意思是喜欢吗$(document.on('keyup',函数(e){onDocumentKeyUp.call(self,e);});可以,但我觉得不太干净。我想知道是否有一种干净、惯用的方法可以通过eventhandler传递这个值。
$(document).on('keyup', this.onDocumentKeyUp.bind(this));