1

次のように .call() または .apply() を使用して別の関数を呼び出す必要がある状況に遭遇しました。

function b() {
  alert(arg);
}

それで

function a(arg) {
  b.call();
}
a(123);

関数 b が呼び出されますが、arg にアクセスできません。大丈夫です、スコープを渡すことができます..はい?

function a(arg) {
  b.call(this);
}
a(123);

まだいいえ -関数 b からargにアクセスできません。どうすればいいですか?

更新: b 関数を変更したくありません:-)

4

6 に答える 6

0

を呼び出したときに引数を渡すことができませんでしたb

Function::call固定数の引数を渡すことができます。

function a(arg1,arg2) {
    return b.call(this,arg1,arg2);
}

Function::apply配列として、任意の数の引数を渡すことができます。

function a(arg1,arg2) {
    return b.apply(this,[arg1,arg2]);
}

// or

function a(arg1,arg2) {
    return b.apply(this,arguments);   // The magical 'arguments' variable
}

thisはコンテキスト オブジェクトであり、スコープとは異なります。

于 2013-05-30T18:03:48.110 に答える