7

メンバー関数render()があります。この関数は、クラスadd(any)の別のメンバーを呼び出します。これはスニペットです。

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

addでキーワード「this」を使用すると、タイプはwindowです。メンバークラスのインスタンスになると思います。

コンストラクター、メンバー関数、またはメンバーアクセサーでは、これは含まれているクラスのクラスインスタンスタイプです。

4

2 に答える 2

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);
    });
}

別のオプションは、目的の へbindadd呼び出しを明示的に行うことthisです。

render(){
    collection.each(this.add.bind(this));
}
于 2012-12-03T15:54:54.297 に答える
4

バグではないと思います。

あなたはもはやrender()関数のスコープではなく、代わりに のスコープにいeach()ます。

これを試して:

render(){
    var that = this;
    collection.each(that.add);
}
于 2012-12-03T12:47:34.857 に答える