Сомневаюсь.
Движок, который анализирует и выполняет javascript, находится в браузере клиента, и поэтому не может быть изменен или изменен каким-либо веб-сайтом (я надеюсь).
Потенциально вы можете использовать поддерживаемые javascript типы и синтаксис для описания лямбда-выражения, а затем иметь собственную библиотеку javascript, которая расширяет ее до допустимых вызовов javascript.
Однако это было бы не очень полезно, поскольку функции JavaScript уже очень гибки. Ваш код выше в действительном JS будет выглядеть как эквивалентный делегат c #:
var x = myJsObjCollection.Where(function() { if (this.ID == 2) return this; });
Который не намного больше работы, чтобы напечатать.
Обновление
Чтобы сделать идею Боба на пару шагов дальше, вы могли бы написать что-то вроде этого:
function lambda(vName, comparison)
{
var exp = new RegExp("\\b" + vName + "\\.", "g");
comparison = comparison.replace(exp, "arg.");
return function(arg) {
var result;
eval("result = " + comparison + ";");
return result;
};
}
Тогда ваша функция Where будет выглядеть примерно так:
Array.prototype.Where = function(lambdaFunc) {
var matches = [];
for (var i in this)
{
if (lambdaFunc(this[i]))
matches[matches.length] = this[i]
}
return matches;
};
И вы могли бы назвать это:
var x = myJsObjCollection.Where(lambda("a", "a.ID == 2"));
Рабочий пример на http://jsbin.com/ifufu/2/edit.