1

私はこのようなオブジェクトで定義された関数を持っています:

    connect(callback?: (connected: bool) => void) {
        $.ajax(this.url + "/connect", $.extend(true, {}, this.ajaxSettings, {
            success: (data) => {
                this.errorChecker(data, (data) => {
                    if (callback != null) {
                        callback(data);
                    }
                });
            },
            timeout: this.timeout,
            error: () => {
                if (callback != null) {
                    callback(false);
                }
            }
        }));
    }

TypeScriptコンパイラはそれを受け取り、これを生成します。

        VAS.prototype.connect = function (callback) {
            $.ajax(this.url + "/connect", $.extend(true, {
            }, this.ajaxSettings, {
                success: function (data) {
                    _this.errorChecker(data, function (data) {
                        if(callback != null) {
                            callback(data);
                        }
                    });
                },
                timeout: this.timeout,
                error: function () {
                    if(callback != null) {
                        callback(false);
                    }
                }
            }));
        };

jsの次の行に注意してください。

_this.errorChecker(data, function (data)

コンパイラは、=>演算子の使用に正しく気づき、元のTypeScriptでは親オブジェクトを参照する必要があり、成功コールバックが実際に呼び出されたときにthis何が起こっても参照しないと結論付けました。thisしかし、何らかの理由で、コンパイラはマジックラインを含めるのを忘れています。

var _this = this;

関数の開始時。これはバグですか?それともこれは仕様によるものですか?_this / thisを完全に無視した場合、私はそれを間違っていると言うだけですが、ここでは途中で何かが間違っていると思います。

更新:奇妙なことに、これはVisual Studioのコンパイラの問題のようです。同じコードをプレイグラウンドにコピーすると、期待どおりに機能します。

4

1 に答える 1

0

これはバグのようです。これを追跡するには、ワークアイテムを開く必要があります。

于 2012-10-08T17:51:37.663 に答える