2011-09-24 13 views
15

jquery.fnを拡張してjqueryオブジェクトのプロトタイプチェーン上にカスタム関数を配置するという概念は理解していますが、私の場合は自分のutilsの一部をセレクタにアタッチする必要はありません。 私は基本的に静的メソッドを探しています。だから私は、静的メソッドをutilメソッドとしてjqueryオブジェクトに直接書くという落とし穴を知りたかったのです。jquery static utilメソッドを書く

例:

jquery.myMethod = function(arg){ 
    ...... 
} 

$.myMethod("blabla"); 

おかげ

答えて

15

実現しているように、すべてのユーティリティ関数をグローバル名前空間にダンプしないことをお勧めします。グローバルな名前空間に与える影響が少ないほど良いでしょう。すでにjQueryのを持っている場合は、それらを置く場所のためのあなたの選択肢は次のとおりです。jQuery.myUtil1()jQuery.myUtil2():としてjQueryオブジェクト上の新しい方法として

  1. jQueryオブジェクトの1つのオブジェクトの新しいメソッドとして、jQuery.jfUtils.myUtil1()jQuery.jfUtils.myUtil2()
  2. 新しいグローバルオブジェクト(jQueryとは関係ありません)の新しいメソッドとして、jfUtils.myUtil1()jfUtils.myUtil2()

オプション2)は、他のjQuery関数と衝突する可能性を少なくするため、オプション2よりも優れています。オプション2)は、関数呼び出しごとに追加の参照を追加します。

オプション3)グローバルネームスペースに新しいアイテムを1つ追加するだけで、名前が合理的に一意になる限り完全に受け入れられるようですが、あなたはOKです。

だから、私はあなたがオプション2)またはオプション3)のいずれかに行くと思います。オプション2)は、その名前空間にあるものの一般的な程度を知っているので少し安全かもしれませんが、どちらかが動作することができます。

+0

jfriend00のおかげで本当にその音の好みの問題になりました。さらにjqueryオブジェクトに直接追加すると、実際にはもっと注意する必要があります。それで、最初にjquery.jsファイルをチェックして、追加する名前と同じ名前のメソッドがないことを確認しました。 jquery namesapceに直接追加するほうがはっきりしているようです。しかし、メソッドを追加するために、別のオブジェクトを直接jquery名前空間に追加するという特別な保護もあります。 – Chapsterj

+0

+1確かにオプション2に行ってください。$ .util.myMethod()と書くのはそれほど悪くはありません。保護すれば頭痛を軽減できます。共通関数を名前空間にグループ化することは、どの言語でもよい方法です。あなたがjQueryのDOM操作チェーンに縛らない限り、例外があります。 –

5

あなたはjQueryのに静的メソッドを追加しないでください。あなたはしようとすると何も得られない。 jQueryの拡張のポイントは、クエリ文字列で見つかったjQueryオブジェクトにメソッドがあるようにすることです。単にグローバル関数を作成するだけなので、関数を保持する新しいトップレベルオブジェクトを作成してください。

+4

あなたの声明は全く真実ではありません。 jQueryオブジェクトにメソッドを追加すると、グローバルな名前空間の汚染やグローバルな名前空間の競合が追加されないため、新しい名前空間に新しい関数をダンプするよりも優れています。他のjQuery関数と衝突しないようにする必要がありますが、グローバルレベルで他のものと衝突する危険はありません。 – jfriend00

+2

グローバルネームスペースに名前を追加するか、そこに何かが衝突しないようにするか、jQueryオブジェクトに新しい名前を追加して、あなたが望んでいないことを期待してくださいそこに何かが衝突する。いずれの場合も同じ問題ですが、少なくともグローバル名空間に名前を追加することによって、トップレベルの名前を所有していて、jQueryが提供するように見せかけることで問題を混乱させません。 –

+0

私の答えで分かるように、私はそれぞれの長所と短所を指摘しました。おそらく、よりよく理解されていると思う名前空間と、競合する可能性の低い名前空間(jQueryオブジェクトの名前空間またはグローバルな名前空間)には、正しい正解はありません。いずれも働くことができます。 jQueryオブジェクトのメソッドではないにもかかわらず、jQueryオブジェクトにjQueryユーティリティ関数を追加することを検討するかもしれないと私のコメントで指摘していました。そうする別の理由があります。 – jfriend00

関連する問題