在运行时将代码插入函数体
Insert code into body of function at runtime
Java,具有字节码编辑经验,我想知道是否可以在运行时使用Javascript更改函数的主体。
对于这个问题,让我们使用以下代码作为示例:
function myFunction(paramA, paramB) {
console.log('a', paramA);
console.log('b', paramB);
}
在运行时,我希望能够将主体更改为:
function myFunction(paramA, paramB) {
console.log('a', paramA);
console.log('hello inserted world');
console.log('b', paramB);
}
如果这是可能的,我知道它将增加代码库的复杂性。因此,如果可能的话,应该在小组项目中避免这种情况(或者当有人最终必须接管时),但这不是现在的问题。
真正的问题是,这是否可能(或者可以近似)以及如何去做?我不是在寻找代码示例,伪就足够了!
一些要求/规则/注意事项:
- 该示例包含一个函数声明,但是函数表达式也是可以接受的。
- 该函数可能被完全覆盖;现有引用可能会丢失。
- 整个应用程序将被缩小,答案应该考虑到这一点。 插入
- 的代码必须在第一个
console.log
之后立即插入,无论任何其他代码可能在体内,也可能不在体内。 - 该函数必须通过
myFunction(a, b)
执行。
这取决于代码的来源。 总是有JavaScript的eval()语句,但由于可能存在安全漏洞,它通常(非常)不鼓励。 请参阅此文章。
更改函数,以便可以使用原型
http://www.w3schools.com/js/js_object_prototypes.asp
用eval
来实现这一点,但它通常被认为是"邪恶的",所以要小心。
eval
可以评估作为字符串传递给它的代码 - 非常危险。
您可以将myFunction
更改为简单地执行eval
并传递所需的任何内容。
function myFunction(a,b,evil) {
eval(evil); //do whatever you want with a, b and evil.
}
您必须使用上述声明覆盖myFunction(a,b)
。
这可能不会坚持你想要的方式,但这是"真正的"JS方式。你真的不应该使用eval或其他东西。这是面向对象的js。
var ov = {};
//the function
var myFunction = function(paramA, paramB) {
console.log('a', paramA);
console.log('b', paramB);
};
//Add something to the function
var dispatch = function(object, method, args){
method.apply(object, args);
//do whatever you want beneath this line
console.log('hello inserted world');
};
dispatch(ov, myFunction, ["pa", "pb"]);
我们在这里做的是创建一个空对象。将这两个参数实际实现到对象中可能是有意义的,但那是另一回事了。我们正在创建一个函数"myFunction"和一个调度程序,并在调度程序函数中调用该函数(通过"apply")。之后,我们可以根据需要添加代码。我们现在能够在 ov 的作用域中执行调度函数。我们通过数组传递参数。
- 如何在 JavaScript 中获取函数体文本
- Javascript重新定义和覆盖现有的函数体
- 为什么可以'我们在函数体中为函数对象添加属性,就像在javascript中为对象文字添加属性一样
- 带验证的插入函数上的Codeigniter Ajax
- 在运行时将代码插入函数体
- 从函数体参数中获取值
- 为什么错误显示为函数体之前缺少{
- 如何在jquery中使用函数体onload
- 在 Azure 表存储的插入函数中查询其他表
- JS:正则表达式,用于查找函数体中的所有函数调用
- 使用回调函数与仅将函数插入函数内部有什么好处
- 如何在dnn中将脚本标记插入到体尾标记中
- CoffeeScript::我不知道为什么在使用 ajax 时返回函数体
- 为什么函数变量(当登录控制台时)没有显示整个函数体
- 使用ajax从同一个javascript函数多次调用,对象在函数体和ajax成功回调之间的参数不相同
- SyntaxError:函数体之前缺少{
- document.write在函数体中
- 在引导程序中插入函数's的javascript
- 在ASP.NET中找不到函数体
- 我想从javascript的函数名和该函数体得到解析到一个单独的文件.我怎么用Java来做呢