【问题标题】:Cleanest way to access class member objects into an anonymous function [duplicate]将类成员对象访问到匿名函数中的最简洁方法[重复]
【发布时间】:2020-05-13 14:40:37
【问题描述】:

我最近遇到了将类成员访问到匿名函数的经典问题。

class A {
    constructor(a) {
        this.a = a;
    }

    printA() {
        console.log(this.a);
    }

    useAnonymousFunction() {
        setTimeout(function(){
            this.printA();
        })
    }
}

instance = new A(42);

instance.useAnonymousFunction();//TypeError: this.printA is not a function

我找到的解决方案是使用将“this”存储到另一个变量中的经典技巧。

useAnonymousFunction() {
    //that or self
    let that = this;
    setTimeout(function(){
        that.printA();
    })
}

为了便于阅读,我在示例中使用了 setTimeout,但它可能用于设置事件或 AJAX 请求。

这个解决方案看起来很丑陋。我试图寻找更优雅的东西,但找不到任何东西。有一些基于绑定的解决方案,但它们似乎并不总是有效(而且它们更不优雅)。

即使在 EC6 中,这种解决方案真的是常态吗?使用使用匿名函数的元素是真正丑陋的部分吗?

提前感谢您的洞察力!

【问题讨论】:

    标签: javascript ecmascript-6 this anonymous-function


    【解决方案1】:

    您正在寻找的优雅解决方案是使用箭头功能:

    useAnonymousFunction() {
        setTimeout(() => this.printA())
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多