gpt4 book ai didi

javascript - 为什么这个扩展不起作用?

转载 作者:行者123 更新时间:2023-11-29 22:22:40 25 4
gpt4 key购买 nike

我想有一种方法可以将功能添加到预先存在的函数中,所以我做了这个:

Function.prototype.attachFunction = function(toAttach)
{
var func = this; //This is the original function, which I want to attack toAttach function to.

//Can I do this without wrapping it in a self-executing function? What's the difference?
func = (function()
{
return function()
{
func();
toAttach();
}
})();

return func; //Return the newly made function, not really important.
}

我将它粘贴到 Google Chrome 控制台,没有错误,但是,它根本没有(或者看起来)改变了原始功能。

f = function() {console.log("g");};
f.attachFunction(function(){console.log("New function!");});
f(); //Prints out just "g".

最佳答案

attachFunction 执行时,它返回一个执行 func()toAttach 的函数。但是,如果您将代码更改为以下代码,它将尝试执行这两个函数,目前旧的 f 仍会在最后调用。

f = function() {console.log("g");};
f = f.attachFunction(function(){console.log("New function!");});
f(); //Causes an infinite loop since calling func() is the same as calling this()

要合并两个函数,我们需要以相同的方式包装它们,但不是在扩展函数时

var func1 = function(){
console.log('g');
};
var func2 = function(){
console.log('New function!');
};

func1 = (function(f1,f2){
return function(){
f1();
f2();
}
}(func1, func2));

func1(); //Writes out both g and New function!​​​​​​​​​​​​​​​​​​​​

我传入 func1 和 func2 作为参数的原因是为了防止进入无限循环的相同问题。我想在那个时间点维护对这些函数的引用。

辅助函数如下所示

function combineFunctions(f1, f2){
return function(){
f1();
f2();
}
}

会像这样使用

var f = function() {console.log("g");};
f = combineFunctions(f,function(){console.log("New function!");});
f();

关于javascript - 为什么这个扩展不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11480170/

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