使用事件侦听器时维护’this’的值

我有以下function:

onDocumentKeyUp: function (e) { if (e.keyCode === 27) { this.deactivate(); } } 

我想像这样绑定它:

 $(document).on('keyup', onDocumentKeyUp); 

但是,当我这样做时, onDocumentKeyUp函数内的onDocumentKeyUp引用文档。 我这样解决了这个问题:

 var self = this; $(document).on('keyup', function(e) { self.onDocumentKeyUp(e); }); 

这有效,但有些东西告诉我有一个更清洁的方法来解决这个问题。 将.apply() .call().apply()某种方式……应用于此处吗? 我仍然不确定这些function是如何工作的。

另外,我不一定要把自己限制在jQuery.on() 。 如果有一种“香草”的方式,请做我的客人教我。

请注意on方法的data参数: http : //api.jquery.com/on/此外,您可以使用jQuery.proxy方法: http : //api.jquery.com/jQuery.proxy/

这是jsFiddle: jsFiddle

您可以使用.bind()来设置上下文(不立即调用它,如callapply ):

 $(document).on('keyup', this.onDocumentKeyUp.bind(this)); 

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