将this/self/that绑定到事件回调,当它可以不作为事件回调调用时
Binding this/self/that to an event callback when it can be called not as an event callback
我是javascript模块化编程的新手,我经常遇到这个问题,我不确定处理它的最佳方法是什么。
假设我有一个方法,我想在某些情况下作为事件处理程序使用,并根据url参数在其他情况下作为模块初始化的常规流程的一部分。
var people = {
render: function(data){
// This takes data from a JSON object and turns it into HTML
var html = '';
for(var i; i < data.length; i++){
html += '<li><a data-firstname="'+data.firstName+'" data-lastname="'+data.lastName+'">Some text</a>';
}
$('#element').html(html).find('li a').click(this.getFullName);
},
getFirstName: function(event){
// This method is called both as an event handler or as part of the initialization process.
if(event !== undefined){
event.preventDefault();
}
var fullName = $(this).attr('data-firstname') || someOtherSource.firstName;
},
someOtherMethod: function(){
this.getFirstName();
}
};
关于它的事情是,虽然我失去了'this'关键字,因为这需要引用正在被操作的DOM元素。我知道我可以这样做:
var self = this;
$(#element).click(self.getFirstName.bind(this, self));
传递self作为参数,但是事件对象呢?它会解释"自我"作为事件对象吗?
一个标准策略是使用闭包:
var self = this;
$(#element).click( function(evt) { self.getFirstName(evt); } );
另一种是创建一个绑定函数:
$(#element).click(this.getFirstName.bind(this));
两种技术都使用预期的上下文(this
的值)调用函数。
相关文章:
- Javascript点击事件回调不起作用
- Facebook转换事件回调
- 页面上的所有推特推文都呈现了事件/回调
- 检测事件回调的开始和结束
- 使用qunit.js查询事件回调测试
- Babel中的d3事件回调上下文更改
- socket.io事件回调中模型更改时角度视图未更新
- 从事件回调中引用包含主干视图
- 就地休息 gem 成功事件回调
- 如何在 JavaScript 中编写高效的事件回调方法
- jQuery 事件回调速度:匿名与命名函数
- 事件回调在 Mozilla Firefox 中未触发
- 在事件回调中获取对模型的引用
- 在 Backbone 中.js事件回调这是什么,以及如何访问触发的元素
- 什么是.js完整的事件回调
- 将参数传递给项视图中的事件回调
- 多态函数作为事件回调
- 这真的是从事件回调中获取 Rx.Observable 的最佳方式吗?
- GTM数据层事件回调函数
- 管理“;这个“;在事件/回调驱动的JavaScript应用程序中