我有以下Javascript类:

class App {

    log_text(text) {
        console.log(text)
    }

    process_response(response) {
        this.log_text(response) // Uncaught TypeError: this.log_text is not a function
        // self.log_text(response) // Uncaught TypeError: self.log_text is not a function
    }

    do_stuff() {
        this.log_text('hello') // OK
    }

    fetch_data() {
        jQuery.get('http://example.com/data/sample.txt', this.process_response, 'text')
    }
}


调用方法do_stuff时,可以通过调用log_text很好地访问this.log_text。但是,在本例中用作process_response的回调处理程序的方法jQuery.get失败,因为this在该上下文中表示完全不同的对象。

同样,self.log_text也会引发TypeError。

在此示例中,从log_text调用process_response的可能(或正确的)方法是什么?

最佳答案

发生的是,您正在传递process_response函数,仅此而已,因为您已经看到了这些更改的上下文。一种解决方法是使用箭头语法包装它,当jQuery触发回调时,它将保留此值。



 fetch_data() {
        jQuery.get('http://example.com/data/sample.txt', (r)=> this.process_response(r), 'text')
    }

09-10 05:40
查看更多