相关疑难解决方法(0)

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

我有一个构造函数,它注册一个事件处理程序:

function MyConstructor(data, transport) {
    this.data = data;
    transport.on('data', function () {
        alert(this.data);
    });
}

// Mock transport object
var transport = {
    on: function(event, callback) {
        setTimeout(callback, 1000);
    }
};

// called as
var obj = new MyConstructor('foo', transport);
Run Code Online (Sandbox Code Playgroud)

但是,我无法data在回调中访问已创建对象的属性.它看起来this并不是指创建的对象,而是指另一个对象.

我还尝试使用对象方法而不是匿名函数:

function MyConstructor(data, transport) {
    this.data = data;
    transport.on('data', this.alert);
}

MyConstructor.prototype.alert = function() {
    alert(this.name);
};
Run Code Online (Sandbox Code Playgroud)

但它表现出同样的问题.

如何访问正确的对象?

javascript callback this

1309
推荐指数
12
解决办法
36万
查看次数

Javascript setInterval和`this`解决方案

我需要this从我的setInterval处理程序访问

prefs: null,
startup : function()
    {
        // init prefs
        ...
        this.retrieve_rate();
        this.intervalID = setInterval(this.retrieve_rate, this.INTERVAL);
    },

retrieve_rate : function()
    {
        var ajax = null;
        ajax = new XMLHttpRequest();
        ajax.open('GET', 'http://xyz.com', true);
        ajax.onload = function()
        {
            // access prefs here
        }
    }
Run Code Online (Sandbox Code Playgroud)

我如何访问this.prefs ajax.onload

javascript this setinterval

61
推荐指数
5
解决办法
3万
查看次数

ES6从另一个方法调用一个方法

我是ES6语法的新手,我原来的代码有更多的实现,但我已经简化了.我收到一个错误,说无法读取未定义的属性'Method2'.我在这做错了什么?我是否必须进行任何绑定调用.

class Class1 {
  constructor() {      
     eventbus.subscribe(this.Method1);  
    }

  Method1() {
   this.Method2(); 
  }

  Method2(){    
  }  
}
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6

6
推荐指数
1
解决办法
5346
查看次数

'这个'概念在javascript中的对象中

我很抱歉这个简单的问题.但我只是想知道下面的代码中发生了什么.

var indexobj = {
    test : 1,
    testFunction : function() {
        document.getElementById('AA').innerHTML = indexobj.test++;
        //this is i wanted
        document.getElementById('BB').innerHTML = this.test++;
        //NaN
        setTimeout(indexobj.testFunction,1000);
    },
}
setTimeout(indexobj.testFunction,1);
Run Code Online (Sandbox Code Playgroud)

以下是示例链接

http://jsfiddle.net/apss/JR5Xk/28/

为什么在这个例子中'testFunction'函数中的'this'并不意味着'indexobj'这个对象?谢谢你的帮助.

javascript

4
推荐指数
1
解决办法
214
查看次数

typescript window.setInterval()无法正常工作

我遇到了window.setInterval()方法的问题.下面是一个结构示例,重复调用方法"repeat",但是我不能在"repeat"中调用任何方法.在我实例化管理器(让m = new manager())的示例中,它将打印"Before Print",但不会从printStuff方法或"After Print"消息中打印出日志.

有谁知道为什么会这样?显然这不是我的实际代码,因为它很简单,不能在单独的函数中,但是我的实际代码需要在"repeat"函数中调用许多函数,并且当它找到对另一个函数的调用时它将停止执行.

class manager{

constructor(){
    window.setInterval(this.repeat, 5000);
}

repeat(){
    console.log("Before Print");
    this.printStuff();
    console.log("After Print");
}

printStuff(){
    console.log("Print Stuff");
}
Run Code Online (Sandbox Code Playgroud)

javascript typescript

2
推荐指数
1
解决办法
2637
查看次数