gpt4 book ai didi

Javascript:如何在不覆盖该函数的情况下在函数调用上执行代码?

转载 作者:行者123 更新时间:2023-11-30 09:07:25 25 4
gpt4 key购买 nike

所以,我想在每次调用给定函数时都执行一些代码,这可行吗?事情是,我可以覆盖现有的功能并添加代码,但这需要我知道该功能的确切内容......想象一下“库”的“插件”,而你想要插件 - in 每次调用该库的特定函数时执行代码,但您不想覆盖原始库内容...希望我足够清楚!

如果可行,是否有办法检索提交给函数的参数?

最佳答案

对我来说,这听起来像是包装函数的工作。

编写一个调用另一个函数的函数,并将您的代码放在该函数的末尾(或任何地方)。然后始终调用您的版本。

一种适配器模式。 http://en.wikipedia.org/wiki/Adapter_pattern

我相信如果您不能修改调用代码,您可以隐藏原始函数的范围并使用相同的名称(不适用于某些内部函数,如警报,但应该适用于库代码)。如果这不是一个选项,请查看原型(prototype)是否允许您扩展对象以添加功能。 http://phrogz.net/js/classes/ExtendingJavaScriptObjectsAndClasses.html

    //Only add this implementation if one does not already exist. 
if (Array.prototype.slice==null) Array.prototype.slice=function(start,end){
if (start<0) start=this.length+start; //'this' refers to the object to which the prototype is applied
if (end==null) end=this.length;
else if (end<0) end=this.length+end;
var newArray=[];
for (var ct=0,i=start;i<end;i++) newArray[ct++]=this[i];
return newArray;
}

对于参数,您还可以让您的版本采用可选参数(类似于 jQuery/MooTools),然后查看传递的内容。

这里是可选参数的例子。 http://www.openjs.com/articles/optional_function_arguments.php

function accident() {
for( var i = 0; i < arguments.length; i++ ) {
alert("This accident was caused by " + arguments[i]);
}
}

关于Javascript:如何在不覆盖该函数的情况下在函数调用上执行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4037378/

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