是否有可能在不修改原始代码的情况下向现有javascript函数添加一些代码?
Is it possible to add some code to existing javascript functions without modify original code?
有一些javascript代码,例如
function hello() {
}
function world() {
}
我想添加一些日志代码到它们,但我不想修改代码。我希望我可以在另一个文件中编写一些代码,它将在运行时修改函数。这是可能的吗?
谢谢你的两个答案,但我必须使这个问题更清楚。
hello
和world
函数只是一些示例,实际上文件中有数百个函数,可以手动重新定义它们。
我正在寻找一种方法来自动做到这一点(类似于java中的AspectJ)。
你不能修改函数,但是你可以包装它们并用包装器替换函数。
这样的(参见现场演示):
function logFactory(func, message) {
return function () {
console.log(message);
return func.apply(this, arguments);
}
}
hello = logFactory(hello, "Some log message");
这不会让你在被函数操作时获得任何数据,也不会改变函数内部发生的事情(尽管你可以在传递参数之前捕获参数并修改它们,并且你可以捕获返回值并在返回之前修改它)。
您可以使用其他函数名并调用您想要"扩展"的函数
function extendSomefunction(param) {
somefunction(param);
// additional things here
}
你可以在这里找到另一个技巧
复制的代码:var origParseFloat = parseFloat;
parseFloat = function(str) {
alert("And I'm in your floats!");
return origParseFloat(str);
}
除了在新版本中包装函数之外,您唯一的其他选择是在JavaScript文件离开服务器之前修改它们。无论是手动地,作为构建步骤,还是通过HttpHandler动态地。这是最健壮的解决方案,因为它还捕获了在运行时不暴露给您包装的私有函数和私有引用。但是,它需要大量的工作,所以如果上面简单的函数包装答案足够,我衷心推荐它!
您可以将该函数包装起来,并将其替换为包装器:
var originalHello;
originalHello = hello;
hello = function () {
// log your stuff
console.log('fired before original hello is triggered');
// call original hello with the current scope & arguments
originalHello.apply(this, arguments);
}
相关文章:
- 云代码(javascript)失败,原因是:{代码:1,消息:内部错误
- 简化此If语句,使其不会't重复代码-Javascript
- 十进制到二进制代码Javascript
- 第二次单击时执行不同的代码(JavaScript)
- 在不使用jquery($symbol)knockout.js的情况下分离代码javascript
- 缩短几个元素的onclick代码 - JavaScript
- 英国银行排序代码 JavaScript 正则表达式
- 我无法在谷歌图表的代码 javascript 中获取 json 数据(项目 Python Hello Dashboard
- 和代码 JavaScript 没有被 &.
- 我怎样才能减少这段代码 javascript 代码,这样它就不会那么重复了
- 我想单击一个按钮,一次只执行已经制作的程序中的一行代码.(JavaScript)
- 滑动 DIV 代码 Javascript 的小问题
- 尝试重写代码 JavaScript
- 是否可以检测到在不使用键代码 javascript 的情况下按下了输入键
- 输入网址代码 JavaScript 播放器
- 管理通用客户端代码(javascript/css)
- 理解代码javascript
- 加载json-url参数代码(javascript修改)
- 变量检查错误的代码(javascript)
- css属性仅由代码javascript应用