誰か助けてくれないかしら
次のコードのjQueryプラグインがあります。
....
$.Autocompleter.Select = function (options, input, select, config) {
var list;
....
return {
emptyList: function (){
list && list.empty();
}
}
}
emptyList関数をオーバーライドしたいと思います。そして、次のコードを書きました:
originalAutoCompleteSelectFunction = $.Autocompleter.Select;
$.Autocompleter.Select = function (options, input, select, config) {
var ret = originalAutoCompleteSelectFunction.apply(this, arguments);
ret.emptyList = function() {
console.log ("hello");
console.log ("The list=" + list);
};
return ret;
};
それは一種の作品ですが、:
- emptyListの私の実装は実行されます-コンソールに「hello」が表示されます-しかし、emptyListの元の実装も実行されます。それで、それは実際にはオーバーライドされた関数ではありませんか?それは増強のようなものですか?
- 変数「リスト」にアクセスできないようです
だから、2つの質問。既存の関数を本当にオーバーライドするようにコードを正しく記述しましたか?そして、変数「リスト」にアクセスすることは可能ですか?私はそれがクロージャーのプライベートメンバーであることを知っていますが、この方法でプライベートメンバーにアクセスできない場合、おそらくそれは(それらのプライベートメンバーを使用する)関数をオーバーライドする機能を無意味にしますか?
それとも私は何かを逃したことがありますか?
私はすでに既存のjQuery関数を拡張することを見てきました。これにより、この方法で関数をオーバーライドする方法を知ることができました。また、クロージャのプライベートメンバーにアクセスできないことを示唆するjQueryプラグインのプライベートメンバーにアクセスします。
乾杯
ネイサン