javascript - 如何从用作回调的其他类方法访问方法?

标签 javascript

我有以下 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 方法时,我可以通过调用this.log_text 访问log_text。但是,在本例中用作 jQuery.get 的回调处理程序的方法 process_response 失败了,因为 this 代表了一个完全不同的该上下文中的对象。

同样,self.log_text 也会抛出 TypeError。

如本例所示,从 process_response 调用 log_text 的可能(或正确)方法是什么?

最佳答案

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

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

关于javascript - 如何从用作回调的其他类方法访问方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54340134/

相关文章:

javascript - 使用 intel.xdk.file.uploadToServer 时的其他参数?

javascript - React-Router:为什么 <Link> 组件的 onClick 处理程序不会调度我的操作?

javascript - jquery 图层 slider : stop layerslider when mouseover on navigation bar (nav)

javascript - 如何在 Service Worker 中缓存动态 URL?和预缓存有关系吗?我正在使用 ReactJS 默认 serviceWorker

javascript - Captcha php ...我不知道什么是错误

javascript - react-native 是否支持 jdk 17?

javascript - keypress() 是否仅在 Firefox 中聚焦文本字段时触发?

JavaScript toUpperCase 只有第一个字母

字符类中的 Javascript 正则表达式无效范围

javascript - jQuery:我无法在具有动态值的循环中设置值