使用事件侦听器时维护’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()
来设置上下文(不立即调用它,如call
或apply
):
$(document).on('keyup', this.onDocumentKeyUp.bind(this));
由于此方法仅受兼容ES5.1的浏览器支持,因此您可以使用jQuery.proxy
而不是polyfilling它。