1

以下に含まれる関数のセットがあります。

var main = {
    func1: function() {
        ...
    },
    func2: function() {
        ...
    }
}

コードの後に​​、次の行があります。

$('a.specialLink').click(main.func2);

関数 内では、func2経由thisでオブジェクトへの参照がありますが、onclick イベントから呼び出されると、thisコンテキストは、関数が含まれるオブジェクトではなく、それを呼び出した要素に変更されます。thisコンテキストをメイン オブジェクトに戻す方法はありますか? に置き換えることができることはわかってmain.いますが、インスタンス化されたオブジェクトに対して同様のことを行う必要がある場合、それは機能しません。

これまでに考えられる唯一のことは、セットアップ行を次のように置き換えることです。

$('a.specialLink').click(function() { main.func2(main) });

whereには(未定義の場合に設定)func2として使用される引数がありますが、それは私にとっては面倒です。thisthis

4

1 に答える 1

3

これまでに考えられる唯一のことは、セットアップ行を次のように置き換えることです。

$('a.specialLink').click(function() { main.func2(main) });

基本的にはその方法です。mainただし、このように関数を呼び出すと、すでにthisコンテキストになるため、引数として省略できます。

$('a.specialLink').click(function() { main.func2() });

ただし、その関数式を書き出す代わりに、ES5.1bindメソッドを使用することもできます。

$('a.specialLink').click(main.func2.bind(main));

これは、この場合のイベント オブジェクトのように、すべての引数を暗黙的にパススルーします。

于 2013-05-20T12:10:02.400 に答える