是否可以在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”里面,我需要访问他参数中函数中使用的变量
答案 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"));
}
}