gpt4 book ai didi

javascript - 关于浏览器javascript引擎的理论问题

转载 作者:行者123 更新时间:2023-11-29 17:32:26 34 4
gpt4 key购买 nike

我怀疑这是可能的,而且我确信在生产环境中这样做将是一个非常糟糕的主意。这只是那些假设的“我想知道我是否可以……”的事情之一。

我想知道是否可以修改或扩展浏览器 JavaScript 引擎在运行时解析代码的方式。例如:如果我尝试在 JavaScript 中使用 C# 风格的 lambda 语法:

var x = myJsObjCollection.Where(a=>a.ID == 2);

我可以修改脚本的解析并拦截 lambda 代码并自行解析吗?

最佳答案

我对此表示怀疑。

解析和执行 javascript 的引擎位于客户端的浏览器上,因此任何网站都不能修改或更改(我希望如此)。

您可能可以使用 javascript 支持的类型和语法来描述 lambda 表达式,然后拥有自己的 javascript 库,将其扩展为有效的 javascript 调用。

但是,它不会那么有用,因为 javascript 函数已经非常灵活。上面有效 JS 中的代码看起来像等效的 c# 委托(delegate):

var x = myJsObjCollection.Where(function() { if (this.ID == 2) return this; });

这并不是需要输入更多工作。

更新

采取Bob's Idea再进一步,您可能会编写如下内容:

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 .

关于javascript - 关于浏览器javascript引擎的理论问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2421702/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com