2

onSelect 属性を持つ jquery プラグインがあるとします。ユーザーはそれを関数に設定し、その関数が呼び出されるとthis、プラグインが適用されるオブジェクトを参照します。すべてが良いです。

このプラグインをラップするプラグインを書きたい場合は、onSelect にコードを挿入するために、次のようにします。

// Get whatever the user put in
var extOnSelect = options['onSelect'];

// delete the onSelect attribute
delete options['onSelect'];

// re-add onSelect as an anonymous function that calls my method and the user's
var options = $.extend({ 
    'onSelect': function() { onSelect(); extOnSelect(); }
    }, options);

// call the plugin that I am wrapping / injecting extra onSelect code into
$(this).externalPlugin(options);

次に、ユーザーが入力した内容を保持しながら、独自の onSelect コードを渡します。

唯一の問題は、これら 2 つの関数のそれぞれがthisオブジェクトを参照しなくなったことです。現在は、一般的なインライン関数を参照していると思います。

これを修正するための最良の解決策は何ですか?

4

2 に答える 2

3

用途applyarguments目的

extOnSelect.apply(this, arguments);

extOnSelect現在の関数とまったく同じように呼び出します。

を使用することもできますcallが、その場合はイベント オブジェクト (およびその他の可能な引数) を明示的に渡す必要があります。

于 2012-10-18T10:15:44.093 に答える
1

callJavaScript関数のメソッドを使用する必要があると思います。

var options = $.extend({ 
'onSelect': function() { onSelect.call(this); extOnSelect.call(this); }
}, options);
于 2012-10-18T10:15:22.093 に答える