Javascript Linq.js作用域
我被以下情况困住了。我有一个select语句,它使用当前作用域中的函数Javascript Linq.js作用域,javascript,linq.js,Javascript,Linq.js,我被以下情况困住了。我有一个select语句,它使用当前作用域中的函数me。如何将me放入选择功能 var me = this; var results = Enumerable .from(jsonData) .select('x,i=>{abbr:me.transform(x), name:x}') .toArray(); //me.transform(x) will hit error “me”是
me
。如何将me
放入选择功能
var me = this;
var results = Enumerable
.from(jsonData)
.select('x,i=>{abbr:me.transform(x), name:x}')
.toArray(); //me.transform(x) will hit error
“me”是动态生成的对象的实例,而me.transform(x)
也使用“me”中的其他依赖项来工作。这意味着我不能使“me.transform()”成为全局函数
编辑
实际上,这个修改会起作用,但是,我想知道如何使快捷语法起作用。我的错。这就是你的意思吗
var me = this;
var results = Enumerable
.from(jsonData)
.select('x,i=>{abbr:' + me.transform(x) + ', name:x}')
.toArray(); //me.transform(x) will hit error
可以做的是将对象投影到一个复合对象,该复合对象包含集合中的项和要引入查询的对象 您可以使用此
Capture
函数来捕获变量:
function Capture(bindings, name) {
var benumerable = Enumerable.From(bindings),
itemname = name || 'Item';
return function (e) {
return e.Select(function (item) {
return benumerable.Concat(Enumerable.Return({ Key: itemname, Value: item }))
.ToObject("$.Key", "$.Value");
});
};
}
在Let
绑定中使用它
var query = Enumerable.From(data)
.Let(Capture({ Me: me }))
.Select("{ abbr: $.Me.transform($.Item), name: $.Item }")
.ToArray();
变量“me”中有什么?只是一根绳子吗?它的用途是什么?抱歉,但它不起作用,因为您将参数(x)拖出,而x现在从引用的“x,i=>…”上下文中不知从何而来。我想这个技巧更具体地体现在Linq.js是如何形成其快捷语法的。请看我的编辑。
var query = Enumerable.From(data)
.Let(Capture({ Me: me }))
.Select("{ abbr: $.Me.transform($.Item), name: $.Item }")
.ToArray();