为了账号安全,请及时绑定邮箱和手机立即绑定

如何在回调中访问正确的`this`?

如何在回调中访问正确的`this`?

杨魅力 2019-05-20 15:07:27
我有一个构造函数,它注册一个事件处理程序:function MyConstructor(data, transport) {    this.data = data;    transport.on('data', function () {        alert(this.data);    });}// Mock transport objectvar transport = {    on: function(event, callback) {        setTimeout(callback, 1000);    }};// called asvar obj = new MyConstructor('foo', transport);但是,我无法data在回调中访问已创建对象的属性。它看起来this并不是指创建的对象,而是指另一个对象。我还尝试使用对象方法而不是匿名函数:function MyConstructor(data, transport) {    this.data = data;    transport.on('data', this.alert);}MyConstructor.prototype.alert = function() {    alert(this.name);};但它表现出同样的问题。如何访问正确的对象?
查看完整描述

6 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

我们不能将setTimeout()它绑定到,因为它总是用全局对象(Window)执行,如果你想this在回调函数中访问上下文,那么通过使用bind()我们可以实现的回调函数:

setTimeout(function(){
    this.methodName();}.bind(this), 2000);


查看完整回答
反对 回复 2019-05-20
  • 6 回答
  • 0 关注
  • 886 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信