打字稿中的this关键字。这是一个错误吗?

时间:2012-12-03 12:30:54

标签: typescript

我有一个成员函数render()。此函数调用类add(any)的另一个成员。这是片段。

render(){
    collection.each(this.add);
}

如果我在添加中使用关键字“this”,则类型为window。我希望它是成员类的实例。

  

在构造函数,成员函数或成员访问器中,这是包含类的类实例类型。

2 个答案:

答案 0 :(得分:16)

正如JcFx指出的那样,this范围在each回调中是不同的。

但是,如果你使用'胖箭头'匿名函数,它将使用this的词法作用域规则,以便你得到你想要的东西:

render(){
    collection.each((x) => this.add(x));
}

编译为以下JavaScript:

X.prototype.render = function () {
    var _this = this;
    collection.each(function (x) {
        return _this.add(x);
    });
}

另一种选择是明确bind add对所需this的调用:

render(){
    collection.each(this.add.bind(this));
}

答案 1 :(得分:4)

我不认为这是一个错误。

您不再属于render()函数的范围,而是在each()的范围内。

试试这个:

render(){
    var that = this;
    collection.each(that.add);
}