0
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'; }か?

4

2 に答える 2

3

このように関数を構成できます

// (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; });

2 つの小さな関数を組み合わせて、次のように動作する関数を取得できます。

function(a) { a += 'b'; console.log(a); return a + 'c'; }
于 2012-09-05T14:45:26.480 に答える
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があります

于 2012-09-05T15:28:05.223 に答える