Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery函数作用域内类上的TypeScript调用方法_Javascript_Jquery_Scope_Typescript - Fatal编程技术网

Javascript jquery函数作用域内类上的TypeScript调用方法

Javascript jquery函数作用域内类上的TypeScript调用方法,javascript,jquery,scope,typescript,Javascript,Jquery,Scope,Typescript,我有下面的TypeScript类 export class BrandViewModel { private _items = ko.observableArray(); public Add(id: number, name: string, active: boolean) : void { this._items.push(new BrandItem(this, id, name, active)); }

我有下面的TypeScript类

export class BrandViewModel {

        private _items = ko.observableArray();

        public Add(id: number, name: string, active: boolean) : void {
            this._items.push(new BrandItem(this, id, name, active));
        }

        public Get() : void  {
            $.get("/api/brand", function(items) {
                $.each(items, function (i, item) {
                        this.Add(item.Id, item.Name, item.Active);
                    });
            }, "json");
        }
}
Get
方法的结果javascript是:

    BrandViewModel.prototype.Get = function () {
        $.get("/api/brand", function (items) {
            $.each(items, function (i, item) {
                this.Add(item.Id, item.Name, item.Active);
            });
        }, "json");
    };
我在
TypeScript
文档中看到我可以这样做:

    public Get() : void  {
        $.get("/api/brand", () => function(items) {
            $.each(items, function (i, item) {
                    this.Add(item.Id, item.Name, item.Active);
                });
        }, "json");
    }
    public Get() : void  {
        $.get("/api/brand", (items) => {
            $.each(items, (i, item) => {
                    this.Add(item.Id, item.Name, item.Active);
                });
        }, "json");
    }
其结果如下所示,其中
\u this
现在是对
BrandViewModel
实例的引用,但jquery
中的
this
。每个
函数并没有像我预期的那样更改为
\u this

    BrandViewModel.prototype.Get = function () {
        var _this = this;
        $.get("/api/brand", function () {
            return function (items) {
                $.each(items, function (i, item) {
                    this.Add(item.Id, item.Name, item.Active);
                });
            };
        }, "json");
    };
相反,我在
TypeScript
中完成了以下操作:

    public Get(): void {
        var _this = this;
        $.get("/api/brand", function(items) {
            $.each(items, function (i, item) {
                    _this.Add(item.Id, item.Name, item.Active);
                });
        }, "json");
    }
这给了我想要的结果:

    BrandViewModel.prototype.Get = function () {
        var _this = this;
        $.get("/api/brand", function (items) {
            $.each(items, function (i, item) {
                _this.Add(item.Id, item.Name, item.Active);
            });
        }, "json");
    };
有人知道更合适的方法吗?您可以这样做:

    public Get() : void  {
        $.get("/api/brand", () => function(items) {
            $.each(items, function (i, item) {
                    this.Add(item.Id, item.Name, item.Active);
                });
        }, "json");
    }
    public Get() : void  {
        $.get("/api/brand", (items) => {
            $.each(items, (i, item) => {
                    this.Add(item.Id, item.Name, item.Active);
                });
        }, "json");
    }
由此产生:

    BrandViewModel.prototype.Get = function () {
        var _this = this;
        $.get("/api/brand", function (items) {
            $.each(items, function (i, item) {
                _this.Add(item.Id, item.Name, item.Active);
            });
        }, "json");
    };

与一致,当使用=>时,TypeScript会在词汇上绑定它。

非常好,谢谢。有没有可能解释一下它是如何工作的?i、 e.知道将
\u this
放在这两个函数之外吗?这是在使用胖箭头符号时生成的,即()=>{}@basarat,我想问的是胖箭头符号被使用了两次并嵌套了。。
\u如何将此
放在正确的位置。@昂贵的typescript将在胖箭头链的顶部生成它。如果中间有一个
函数()
,那么链就会断开。你能帮我介绍一下我的演示吗?我不知道为什么它不能运行