Javascript / Typescript - >访问函数的上一个范围

时间:2016-03-12 14:32:30

标签: javascript scope typescript

是否可以在Javascript中访问函数的先前作用域?或者是否可以在调用函数时自动将“this”赋值给typescript中的参数? (所以我有以前的范围)

例如:(在我的类Queryable中定义的函数)

    Where(filter: (part: T) => boolean): Queryable<T> {
    var ast = acorn.parse("(" + filter.toString() + ")"); ...

我从外面使用它:

var aa = new Queryable<ITest>();
var jj = "bb";
aa.Where(x => x.content == "aa" && x.bb.content == jj || x.form.Contains("Hallo"));

现在在我的Where函数中,我需要得到“jj”的值

Mabey多一点代码帮助:

class Queryable<T> {

    Where(filter: (part: T) => boolean): IQueryable<T> {
        var ast = acorn.parse("(" + filter.toString() + ")");

        return null;
    }
}

interface String {
    Contains(par: String): boolean;
    StartsWith(par: String): boolean;
    EndsWith(par: String): boolean;
}

interface ITest {
     content: string;
     form: string;
     href: string;
     bb: ITest;
     cc: ITest[];
}

function test() {
     var aa = new Queryable<ITest>();
     var jj = "bb";
     aa.Where(x => x.content == "aa" && x.bb.content == jj || x.form.Contains("Hallo"));
 }

 test();

在“Where”里面,我需要访问他参数中函数中使用的变量

1 个答案:

答案 0 :(得分:0)

我认为不可能访问之前的&#39;范围除了其全局范围的情况(参见更多here)。即使它尽可能,你也可以参考这个&#39;它不允许您访问变量。

我建议重做你的方法并使用而不是变量 - 类的对象具有设计用于保存所有必需信息的属性。然后,您将能够传递此类父对象的实例以及函数调用,并根据需要访问其属性。

大致相同:

class Queryable<T> 
{
    public Where(parent: any, filter: (part: T) => boolean): IQueryable<T> 
    {
        var jj = parent.jj;
        var ast = acorn.parse("(" + filter.toString() + ")");
        return null;
    }
}

class Test 
{
    public jj;

    public Run()
    {
        this.jj = "bb";
        let aa = new Queryable<ITest>();
        aa.Where(this, x => x.content == "aa" && x.bb.content == this.jj || x.form.Contains("Hallo"));
    }
}