2009-10-19 14 views
5

今日、jQueryに関する私の唯一の質問は、jQuery.extend()jQuery.fn(プラグインで使用される)をいつ使うべきかということです。バジルゴールドマンは "Defining your own functions in jQuery"に説明があるようですが、何らかの理由で私はまだ私が最良の情報を持っていることに満足していません。 jQuery.fnで作業を開始したら、本格的なプラグインを構築する必要があるかどうかを検討する必要があります。これは、拡張、新しい関数の追加、プラグインの構築といった3つの問題を意味します。この3つをすべて綿密に説明する必要があります。これは説明に値するのですか?jQuery:拡張、新しい関数の追加とプラグインの構築?

答えて

7

あなたはあまりにも難しいと思うかもしれないと思います。 :) jQueryのソースに

- 伸びる()は一度定義し、両方の名前空間で使用される:

jQuery.extend = jQuery.fn.extend = function() { .. }; 

技術を、すべてのこの機能は、一緒にマージプロパティオブジェクトではありません。

だから、最も基本的なユースケースには、あなただけの単一のオブジェクト(多くのプラグインのオプション・パラメータのような)の中に2つのオブジェクトをマージ:プレーンジェーン$ || jQueryの名前空間に機能を拡張

this.options = $.extend({}, defaultOptions, userOptions); // Just mergin' objects 

その関数をjquery名前空間に静的な関数として追加するだけです。 jQuery名前空間に入る関数は、一般に、要素を操作する必要のない関数です。これらはisArray()やisFunction()のような関数で、より多くの束があります。

var noWhiteSpace = $.trim(string); // No element needed 

jQuery.fnはjQueryオブジェクトに渡される要素に基づいてアクションを実行する機能のため多かれ少なかれ予約されています。これらは通常のプラグインのようなもので、jQueryで慣れているほとんどのものです。

$('div').css('border', '1px solid green'); // Do work on a set of elements 

さらに興味深いことに、jQueryソースの$ .data()関数のようなものを見ると、両方の名前空間で定義されています。これは$ namespaceで最初に定義され、最初のパラメータとしてandを取ります。後で$ .fnに拡張され、最初のパラメータが 'this'として設定された最初の関数が呼び出されます。

あなたが探しているものが欲しいです!

+0

私はあなたの答えをありがとう!私はYUI 2.xからレガシーコードをjQueryに移しているので、「難しい」と考える必要があります。[ 今、プラグインを構築する必要があるのは、「プライベート」サポートがある場合です"public"拡張機能のための関数---右? – rasx

+0

これは、プラグインを使用する理由ですね、うん! –

関連する問題