gpt4 book ai didi

javascript函数修改

转载 作者:行者123 更新时间:2023-11-29 18:35:46 26 4
gpt4 key购买 nike

我正在尝试编写一个将消息记录到屏幕的记录器对象。这是我的代码。 http://github.com/huseyinyilmaz/javascript-logger在每个需要记录内容的函数中,我在函数的开始和结束处编写了 loggerstart 和 loggerEnd 函数。但是我想为每个函数自动运行这些代码。有没有办法修改函数原型(prototype),以便每个函数调用都可以自动运行。(我没有使用任何 javascript 框架。)

最佳答案

编辑:重写函数以使其更加模块化

嗯,这是一种令人毛骨悚然的方式,但有时当我需要覆盖某些功能时,我会使用这种方式。它运作良好,允许任何类型的定制并且易于理解(仍然令人毛骨悚然)。

但是,您需要将所有函数存储在某种全局对象中。有关详细信息,请参阅示例。

function dynamic_call_params(func, fp) {
return func(fp[0],fp[1],fp[2],fp[3],fp[4],fp[5],fp[6],fp[7],fp[8],fp[9],fp[10],fp[11],fp[12],fp[13],fp[14],fp[15],fp[16],fp[17],fp[18],fp[19]);
}

function attachWrapperToFunc(object, funcName, wrapperFunction) {
object["_original_function_"+funcName] = object[funcName];
object[funcName] = function() {
return wrapperFunction(object, object["_original_function_"+funcName], funcName, arguments);
}
}

function attachWrapperToObject(object, wrapperFunction) {
for (varname in object) {
if (typeof(object[varname]) == "function") {
attachWrapperToFunc(object, varname, wrapperFunction);
}
}
}

和一些用法示例:

var myProgram = new Object();
myProgram.function_one = function(a,b,c,d) {
alert(a+b+c+d);
}
myProgram.function_two = function(a,b) {
alert(a*b);
}

myProgram.function_three = function(a) {
alert(a);
}

function loggerWrapperFunction(functionObject, origFunction, origFunctionName, origParams) {
alert("start: "+origFunctionName);
var result = dynamic_call_params(origFunction, origParams);
alert("end: "+origFunctionName);
return result;
}

attachWrapperToObject(myProgram,loggerWrapperFunction);
myProgram.function_one(1,2,3,4);
myProgram.function_two(2,3);
myProgram.function_three(5);

输出将是:开始,10,end,start,6,end,start,5,end

因此通常它允许您使用自定义的书面包装函数将每个函数自动包装在某个对象中。

关于javascript函数修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3404948/

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