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)

编译器正确地注意到我对 => 运算符的使用并得出结论,this在我原来的 TypeScript 中应该引用父对象,而不是this实际调用成功回调时发生的任何事情。但是,由于某种原因,编译器忘记了包含魔法线:

var _this = this;

在函数开始时。这是一个错误吗?或者这是设计使然?如果它只是完全忽略了 _this / this 东西,我只会说我做错了,但它已经走到了一半,这让我觉得有些不对劲。

更新:奇怪的是,这似乎是 Visual Studio 中编译器的问题,如果我将相同的代码复制到操场上,它会按预期工作。

4

1 回答 1

0

这看起来像一个错误。您应该打开一个工作项来跟踪它。

于 2012-10-08T17:51:37.663 回答