打字稿:在子功能中使用方法参数

时间:2015-06-08 11:30:52

标签: javascript variables methods scope typescript

我不太确定如何用文字表达我的问题,所以让我告诉你一些我的代码:

class MyClass
{
    public Columns: MyCol[];

    public AddColumn(Header: string, Url: string)
    {
        Columns.Add(new MyCol(Header, function()
        {
            $.ajax(Url, ...);
        }));
    }
}

//Somewhere in the execution
var mc = new MyClass()
mc.AddColumn("col1", "myurl1");
mc.AddColumn("col2", "mycol2");

mc.Columns[0].CallFunction();
mc.Columns[1].CallFunction();

所以我所期待的是它将首先调用“myurl1”然后调用“myurl2”。 但它的作用是两次叫“myurl2”。 Url-Parameter的范围不应该只在Method中,所以它应该可以工作吗?

问候 Neokil

1 个答案:

答案 0 :(得分:0)

使用Lambda表达式

您应该在此使用Lambda Expressions(类似() => {...}编写)而不是常规函数定义(function() {...})。 Lambda表达式用于将外部作用域的变量移植到内部函数的作用域中。

在你的情况下,AddColumn的内容看起来应该是这样的(我自己没试过):

    Columns.Add(new MyCol(Header, () => {
        $.ajax(Url, ...);
    }));