如何使用ES6类正确保存自引用?

时间:2016-03-10 15:18:02

标签: angularjs ecmascript-6

老实说,我不确定这种行为的原因是什么:systemjs,babel或我自己的错。我使用类作为自定义控件控制器并在自变量中保存类引用。显然,任何后续控制器实例都会覆盖它。

我创建了一个简单的存储库来演示: 克隆,安装,运行实时服务器或首选服务器。您将看到2个按钮,每个按钮都是自定义控件。单击按钮仅影响一个控件。

https://github.com/alexkolt/selfIsThis

如何使用ES6课程?

2 个答案:

答案 0 :(得分:0)

你并没有真正使用ES6课程。您不需要保存对this的引用 - 只需在类方法中直接访问它。你现在拥有它的方式,CustomControlController的所有实例共享一个self变量。

class CustomControlController {
    constructor() {
        this.value = 0;
    }

    click() {
        var newValue = this.value * 2;
        this.value = newValue;
    }
}

export default CustomControlController;

答案 1 :(得分:0)

我应该发布代码,抱歉。

您希望保存对self的引用的原因是例如在回调中调用它可能会导致不同的引用。 我试图这样做:


    var self;
    class Test {
        constructor(dependency) {
          self = this;
          self.dependency = dependency;
        }
        method() {
            self.dependency().then(value => self.property = value);
        }
    }

就像在模块外部声明self之前所提到的那样。我没有意识到这会发生,因为文件将被包装在一个闭包中。 Joe Clay的回答是正确的,但为了做我想要做的事情,需要在每个需要它的方法中声明自己。


    class Test {
        constructor(dependency) {
            this.dependency = dependency;
        }

        method() {
            var self = this;
            this.dependency().then(value => self.property = value);
        }
    }