1

誰か助けてくれないかしら

次のコードの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;
};

それは一種の作品ですが、:

  1. emptyListの私の実装は実行されます-コンソールに「hello」が表示されます-しかし、emptyListの元の実装も実行されます。それで、それは実際にはオーバーライドされた関数ではありませんか?それは増強のようなものですか?
  2. 変数「リスト」にアクセスできないようです

だから、2つの質問。既存の関数を本当にオーバーライドするようにコードを正しく記述しましたか?そして、変数「リスト」にアクセスすることは可能ですか?私はそれがクロージャーのプライベートメンバーであることを知っていますが、この方法でプライベートメンバーにアクセスできない場合、おそらくそれは(それらのプライベートメンバーを使用する)関数をオーバーライドする機能を無意味にしますか?

それとも私は何かを逃したことがありますか?

私はすでに既存のjQuery関数を拡張することを見てきました。これにより、この方法で関数をオーバーライドする方法を知ることができました。また、クロージャのプライベートメンバーにアクセスできないことを示唆するjQueryプラグインのプライベートメンバーにアクセスします。

乾杯

ネイサン

4

0 に答える 0