2

コア jQuery init 関数 ($() または jQuery() 関数を使用するたびに呼び出される関数) を拡張する方法を発見しました。これは、通常のプロキシ パターンを使用することはできませんが、次のコードで機能します。

var origInit = jQuery.fn.init;

jQuery.fn.init = function(selector, context, rootjQuery) {
    if (some condition) {
        //custom code here, possibly returning some other jQuery object than
        //what jQuery would normally return
    }
    return origInit.call(jQuery.fn, selector, context, rootjQuery);
}

私の質問は、セレクターのキャッシュに使用する最初の意図が問題であることに気付いたので、これが役立つ可能性がある場所です (他のプラグインの動作に影響を与えるため、キャッシングに別の関数を使用することになりました)。

そのため、その方法を共有したいと思いました。また、その方法の潜在的な用途について他のアイデアを聞きたいと思っています. jQueryはすでに多くのセレクターを提供しているため、いつ必要になるかはわかりませんが、何らかのカスタムセレクターをサポートするために使用できるのではないかと思いました。

4

1 に答える 1

2

jQuery には、この概念に基づいて構築されたメソッドがあることがわかります。

jQuery.sub()

これにより、グローバル jQuery オブジェクトを「破損」または「変更」することなく、jQuery をローカルに拡張できます。

個人的な実験から、jQuery は複雑すぎてinit、あらゆる種類の厄介なエッジ ケースに対処せずに関数を変更できないことがわかりました。jQuery オブジェクトの周りにファクトリ装飾メソッドを作成する方がはるかに優れています。

jQuery メソッドまたはコンストラクターの変更には、ロギングから jQuery オブジェクトへの GUID の書き込みなどのカスタム ロジックの挿入まで、さまざまな用途があります。

于 2011-04-30T14:49:37.767 に答える