var myString = '';
myString += 'foo';
myString += 'bar';
myString = myString.replace(/oba/, 'qux');
console.log(myString) // produces "foquxr"
有没有办法同样修补功能,例如转动function(a) { a += 'b'; return a; }
信息function(a) { a += 'b'; console.log(a); return a + 'c'; }
?
答案 0 :(得分:3)
您可以compose函数
// (compose(f, g))(x, y, ...) is the same as f(g(x, y, ...))
function compose(f, g) {
return function (var_args) {
return f.call(this, g.apply(this, arguments));
};
}
所以
var f = compose(
function (x) { console.log(x); return x + 'c'; },
function (a) { a += 'b'; return a; });
允许您组合两个小函数来获得行为类似于
的函数function(a) { a += 'b'; console.log(a); return a + 'c'; }
答案 1 :(得分:2)
你可以通过从声明中获取函数的主体,根据需要操作它,并通过eval
构造函数重新定义它来实现这一点(不使用Function()
):
function myFunction(a) { a += 'b'; return a; }
function changeFunction(){
var func = window['myFunction'].toString();
var body = func.substring(func.indexOf("{")+1, func.lastIndexOf("}"));
body = body.replace("return a;", "console.log(a); return a + 'c';");
window.myFunction = Function("a", body);
}
这是JSFiddle