Mun*_*lla 107 javascript merge append user-defined-functions prepend
我正在尝试自定义现有的JS库而不修改原始的JS代码.这段代码加载了一些我有权访问的外部JS文件,我想要做的是更改原始文件中包含的一个函数,而不复制并将整个文件粘贴到第二个JS文件中.
例如,关闭限制JS可能有这样的功能:
var someFunction = function(){
alert("done");
}
Run Code Online (Sandbox Code Playgroud)
我希望能够以某种方式将一些JS代码附加或添加到该函数中.原因主要是在原始的不可触摸的JS中,函数非常庞大,如果JS得到更新,我覆盖它的函数将会过时.
我不完全确定这是可能的,但我想我会检查.
小智 211
如果someFunction全局可用,那么您可以缓存该功能,创建自己的功能,并让您的功能调用它.
所以,如果这是原来的......
someFunction = function() {
alert("done");
}
Run Code Online (Sandbox Code Playgroud)
你这样做......
someFunction = (function() {
var cached_function = someFunction;
return function() {
// your code
var result = cached_function.apply(this, arguments); // use .apply() to call it
// more of your code
return result;
};
})();
Run Code Online (Sandbox Code Playgroud)
请注意,我.apply用来调用缓存的函数.这让我保留了预期值this,并传递了作为单独参数传递的任何参数,而不管有多少参数.
ggr*_*ner 31
首先将实际函数存储在变量中..
var oldFunction = someFunction;
Run Code Online (Sandbox Code Playgroud)
然后定义你自己的:
someFunction = function(){
// do something before
oldFunction();
// do something after
};
Run Code Online (Sandbox Code Playgroud)
Roc*_*mat 10
您可以创建一个调用代码的函数,然后调用该函数.
var old_someFunction = someFunction;
someFunction = function(){
alert('Hello');
old_someFunction();
alert('Goodbye');
}
Run Code Online (Sandbox Code Playgroud)
我不知道你是否可以更新这个函数,但是根据它的引用方式,你可以在它的位置创建一个新函数:
var the_old_function = someFunction;
someFunction = function () {
/* ..My new code... */
the_old_function();
/* ..More of my new code.. */
}
Run Code Online (Sandbox Code Playgroud)
也.如果要更改本地上下文,则必须重新创建功能.例如:
var t = function() {
var a = 1;
};
var z = function() {
console.log(a);
};
Run Code Online (Sandbox Code Playgroud)
现在
z() // => log: undefined
Run Code Online (Sandbox Code Playgroud)
然后
var ts = t.toString(),
zs = z.toString();
ts = ts.slice(ts.indexOf("{") + 1, ts.lastIndexOf("}"));
zs = zs.slice(zs.indexOf("{") + 1, zs.lastIndexOf("}"));
var z = new Function(ts + "\n" + zs);
Run Code Online (Sandbox Code Playgroud)
和
z() // => log: 1
Run Code Online (Sandbox Code Playgroud)
但这只是最简单的例子.处理参数,注释和返回值还需要做很多工作.此外,还存在许多陷阱.
toString | 切片 | indexOf | lastIndexOf | 新功能