KANTENNA.COM

Solarized

HOME > WEBプログラム覚書 > jQueryのプラグイン作成前のメモ

jQueryのプラグイン作成前のメモ

jQueryのプラグイン作成がなんとなくわかった気になってたけど 全然わかってなかった。ってかjQuery自体わかってなかった。 更に言うとjavascriptが今だにわかってないんじゃねって感じで凹むなー。

「$」と「jQuery」

とりあえず「$」は「jQuery」のエイリアスらしい。 $使ったりjQuery使ってたりでなんなんだろうって思ってたけど そういうことだったのか。

$.extend()と$.fn.extend()

jQuery.extend(object) - jQuery 1.3.2 日本語リファレンスに$.extend()はjQuery名前空間に新たなメソッドを追加。 $.fn.extend()はjQueryオブジェクトのプロトタイプにメソッド追加。

と書いてあるが一体どう使い分けるのかがよくわからない。

「$」と「$(selector)が返すもの」

「$」と「$(selector)が返すもの」は異なるものって認識が まったくなかったけど多分違うもの。

そう考えると上記で言ってることが理解できる。

$.fn.extend()で追加した場合、$(selector)で返ってくるjQueryオブジェクトに メソッドが追加されてる(prototypeオブジェクトのプロパティとして)ので$(selector).hoge()という形式で使える。

一方$.extend()は$そのものにメソッドを追加するのだけで$(selector)で返ってくる オブジェクトにメソッドの追加はされないので$(selector).hoge()という感じでは利用できない。

なのでプラグイン作成する場合は基本的に$.fn.extend()を使うことになるんだろうけど $.extend()を使っているプラグインも多々ある感じ。

$.extend()を使う理由

$.fn.extend()内で全部できそうな気がするんだけどわざわざ $.extend()を使う理由はなんなんだろう??

メモリの節約的な意味かと一瞬思ったけど prototypeオブジェクトに追加されるわけだしなぁ・・・

そういう慣例ならそれですっきり納得なんですが なんか理由あるんだろうなぁ・・・。

もっといろんなプラグインをみれば何か掴めるかもしれないので それまでこれは保留。

$.extend()と$.fn.extend()のイメージ

oは$、o.getは$(selector)的なイメージ。

Javascript
  1.  var o = function(){};
  2.  
  3.  /**
  4.   * $.extend()は一般的に「クラス変数」と呼ばれる形式で
  5.   * $に追加される。
  6.   */
  7.  o.extend = function(){alert("o.extend")};
  8.  
  9.  /**
  10.   * $.fn.extend()で追加されたメソッドは
  11.   * $(selector)で返されるオブジェクトのプロトタイプに
  12.   * 追加される
  13.   */
  14.  o.fn = {hoge: function(){alert("o.fn")}};
  15.  o.get = function(){
  16.   return {}.prototype = o.fn;
  17.  }
  18.  
  19.  onload = function() {
  20.   o.get().hoge(); //o.fnが表示される
  21.  }

トラックバック(1)

2010年1月19日 12:18

[jQuery]こんな機能があったんだ。jQuery stop()WEBプログラム覚書

jQuery stop()のいろいろな機能を試してみたよ続きを読む

コメント

コメントする
Name
Email Address
URL
TIME LINE
2012
02.03

[jQuery]closest()とparents()

今から16年前Netscapeブラウザのソースコードの公開方法の会議の中で、初めてオープンソースという言葉が使われた今日、 みなさんいかがお過ごしでしょうか。

今回の投稿はそれとは関係のないjQueryのparents()とclosest()が 似てたので何が違うのか試した時のメモです。

2012
02.01

[jQuery Mobile]初期化イベントメモ

jQuery Mobileは読み込まれてから

mobileinit -> pagebeforecreate -> pagecreate -> pageinit

の順番でイベントが発生する。

2012
02.01

[WordPress]管理画面のフッタのフィルタとアクション。

時間も時間なので、あまり使用頻度の高くない微妙なネタを。

会員制サイトなどで不特定多数の人にログインさせる場合、フッタのバージョン情報は隠しておきたかったり、 こじゃれたメッセージを表示したいときとか使うアクションとフィルタ。

2012
01.28

[WordPress] ブログの情報を取得する方法とノーキャッシュ疑惑

ブログのget_bloginfo()で取れないデータが必要な場合に使うもの。

2012
01.26

[jQuery Mobile]ダイアログ

jQuery Mobileにおけるダイアログの扱いはウインドウではなくページ。 なので通常のページと同様に扱える。ダイアログウインドウを出す。じゃなくダイアログページに遷移する。的な。

2012
01.25

[Ubuntu11.10]Ubuntuのインストール後の設定

インストール完了後の環境構築。PC起動時いちいちBIOSからブートドライブ選んで ブートするのかと思ってたら起動時にOS選択画面が出てくる。

すばらしいですね。

2012
01.24
2012
01.23

MinGW+Mintty+Git

MinGW+Mintty+Gitをやろうとして失敗に終わった。このエントリーには収穫できるものはありません。

2012
01.21

[PHP]共有サーバーユーザーのためのPEARインストール方法

共有サーバーでは自由にPEARのパッケージがインストールできないので、 プロジェクトローカルに設置することになりますが、以前httpベースのものを使ってみたんですけど、 やたら重くて使い物にならなかったので、僕は普通にFTPでアップするようにしてます。

ってことでプロジェクトローカルへのPEARのインストール方法。