我有以下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')
}