複数のライブラリの関数をオーバーライドする必要があることが多かったため、同様のシナリオで小さなヘルパーを作成しました。このヘルパーは、「名前空間」(関数コンテナー)、関数名、およびオーバーライドする関数を受け入れます。参照されている名前空間の元の関数を新しい関数に置き換えます。
新しい関数は、元の関数を最初の引数として受け入れ、元の関数の引数を残りの引数として受け入れます。常にコンテキストを保持します。void関数とnon-void関数もサポートしています。
function overrideFunction(namespace, baseFuncName, func) {
    var originalFn = namespace[baseFuncName];
    namespace[baseFuncName] = function () {
        return func.apply(this, [originalFn.bind(this)].concat(Array.prototype.slice.call(arguments, 0)));
    };
}
Bootstrapの使用例:
overrideFunction($.fn.popover.Constructor.prototype, 'leave', function(baseFn, obj) {
    // ... do stuff before base call
    baseFn(obj);
    // ... do stuff after base call
});
ただし、パフォーマンステストは作成しませんでした。シナリオによっては、大したことのない不要なオーバーヘッドが追加される可能性があります。