如何正确处理打字稿中的范围

时间:2016-04-26 21:28:06

标签: scope typescript angular

我对上下文有疑问。什么是处理打字稿中的上下文的正确方法?如果我理解正确,我有关闭的问题?当我在一个函数内调用一个函数时,它在对象(类)中,那么它是一个闭包吗?

但我是否必须使用self = this或者是否有更好的打字稿方式?因为我真的不喜欢这个解决方案。而且我不想约束每件小事。

我对tolkien的例子:

export class SomeClass {
    private declaration;

    constructor() {}

    ngOnInit(){
        var self = this;
        some code
        var interval = setInterval(function() {
            self.someFunction();
        }, 1000);        
    }

    someFunction() {
      something
    }
}

感谢您的任何建议

2 个答案:

答案 0 :(得分:4)

在这种情况下,您可以使用arrow function语法,该语法将捕获this的值以引用类原型,如您所愿:

ngOnInit() {
    some code
    var interval = setInterval(() => {
        this.someFunction();
    }, 1000);        
}

答案 1 :(得分:1)

除箭头功能外,您还可以使用bind function

ngOnInit(){
    var interval = setInterval(function() {
        this.someFunction();
    }.bind(this), 1000);
}

或者@IgorRaush说,这更优雅:

ngOnInit(){
    var interval = setInterval(this.someFunction.bind(this), 1000);
}

在某些情况下我更喜欢。