1

縮小された Javascript ファイルに含まれる関数をオーバーライドすることは可能ですか?

詳細: Twitter Bootstrap Typeahead プラグイン (v2.3.2) 内の process() 関数をオーバーライドして、返されたアイテムが表示されたアイテムを超えた場合にドロップダウンの下部にインジケーターを追加しようとしています。

これが私のコードです:

var customProcess = function (items) {
    var that = this

    items = $.grep(items, function (item) {
        return that.matcher(item)
    })

    items = this.sorter(items)

    if (!items.length) {
        return this.shown ? this.hide() : this
    }

    //Get the default item slice and determine whether the indicator is needed
    var itemSlice = items.slice(0, this.options.items);
    if (items.length > this.options.items) {
        itemSlice.push("...");
    }

    return this.render(itemSlice).show();
};

// Reassign the typeahead.process() function to the customized
// version that adds a visual indicator if more items are 
// returned than the amount shown (options.items).
$.fn.typeahead.Constructor.prototype.process = customProcess;

Bootstrap JavaScript の縮小版 (bootstrap.min.js) を使用している場合、これは失敗し、実際には先行入力機能が完全に無効になります。代わりに、縮小されていないバージョン (bootstrap.js) を入手すると、完全に機能します。

[補足として、私は以前、typeahead プラグインの古いバージョン (v1.8.x だと思います) で同じアプローチを使用し、最小化されたバージョンでも完全に機能しました。運が良かっただけ?]

4

1 に答える 1

1

縮小は、「目に見える」API を変更しません。縮小されたライブラリで関数を library.functionName(...) として呼び出すことができる場合、そのプロパティをオーバーライドして別のものに変えることができます (関数は、実行演算子 () を追加して呼び出される単なるプロパティであることに注意してください)。それ)。

注意点が 1 つあります。その関数が を使用して設定されObject.defineProperty、デフォルトconfigurableおよび/またはwritable構成オプション (またはこれらの値が明示的に に設定されているfalse) の場合、変更されないように「ロック」されます (削除および/または割り当てはできません。それぞれ)。

于 2013-06-21T03:17:07.240 に答える