search phpbb-phpbb-FC2BLOG-Info-Edit Template-Post-Edit-Upload-LogOut
以前こちら( 簡単なインスタンスメソッドいくつか──jQuery解読(19) )で pushStack() について次のように触れました。
この pushStack() は大変興味深いメソッドです。新しいインスタンスオブジェクトの その名も prevObject プロパティに、直前の this が指し示すオブジェクトが格納されるようにコーディングされています。このメソッドは jQuery.js で7箇所利用されています。
このことの意味をもう少し掘り下げてみたいと思います。この pushStack() メソッドはどの様な場合に利用するのか、と言う点を明らかにしたいのです。そうしないとこのメソッドを本当に分かったことにはならないと思うからです。
改めて pushStack() メソッドのコードを見てみます。
102: pushStack: function(a) { //所与の第一引数を受け取り、
103: var ret = jQuery(a); //それを第一引数とするjQuery(a)を起動して
//新規 InsObj を作成し、それを ret 変数に代入する。
104: ret.prevObject = this; //その時の this を
//retのプロパティに代入し、thisの内容 をプロパティ
105: return ret; //として持つ新規 InsObj を呼出し元に返す。
106: },
jQuery(obj) というコードによって そのインスタンスにobj が代入されることは以前に触れました。( this 活用──jQuery解読(17) ) このコードが pushStack() で利用されています。(103行)
ここで注目するのは引数の a です。具体例で見てみます。
225: find: function(t) {
226: var data = jQuery.map(this, function(a){ return jQuery.find(t,a); });
227: return this.pushStack( /[^+>] [^+>]/.test( t ) || t.indexOf("..") > -1 ?
228: jQuery.unique( data ) : data );
229: },例えば、上の find() インスタンスメソッドを見てみると、最初の this は、find() が呼び出される経緯から、インスタンスオブジェクトを指しています。そして、ユーザーによって context が指定されていなければ、この場合のインスタンスオブジェクトにはドキュメントノードが代入されています。何故ならば、この find() メソッドの呼び出し元は new jQuery(context) であり、このインスタンスには、ユーザーが context を指定しない場合には document が代入されるからです。( init()メソッドでそう定義されています。 )
ところで、jQueryクラスメソッドである map() メソッドが起動されると this はクラス、つまり jQuery() 関数を指しますが、その実行が終わって data に結果を代入したその後に this.pushStack(data) メソッドが起動されるときには、ここの this も find() メソッド内にありますから、その関数の起動元であるインスタンスオブジェクトに格納されているドキュメントノードを指すことになります。
さてコードの目的に戻ると、data に格納されているノードオブジェクトをインスタンスに返すためにコードが書かれています。そこで jQuery(data) を実行させて変数 ret に目的とするノードオブジェクトを代入し(102行)、そのプロパティである preObject に、この pushStack() メソッドを起動させたときのインスタンスオブジェクト=this であるドキュメントノードを代入した上で(104行)、ret がインスタンスに返され、最終的にユーザーが入力した jQuery(a,c) に返されます。こうして selector で指定した要素ノードの配列が取得出来るわけです。
new jQuery(context).find(selector) が起動すると、ユーザーが目的とする要素名などは find(selector) としてその引数となると共に、このコンストラクタが生成するインスタンスには context が代入されます。
そもそも jQuery.js はインスタンスの内容を return させながら、最終的にユーザーが入力した jQuery(selector,context).method(・・) にその内容を返していくように設計されています。
だから、return されるインスタンスには context ではなく、selector による結果が入っていなければなりません。そこでここで取り上げたjQuery().pushStack() メソッドによって、インスタンスの内容を context から selector に入れ替えることになります。
下図は次のような過程を FireBug で追跡し、pushStack()メソッドを今まさに終わらんとしている段階でのスナップショットです。
$tmp=$("p")[0]を実行し
→ int("p") → 65 return new jQuery().find( "p" ); → find()メソッドに入り、
226 var data = jQuery.map(this, function(a){ return jQuery.find(t,a); });
を経て↓
227 return this.pushStack( /[^+>] [^+>]/.test( t ) || t.indexOf("..") > -1 ?
228 jQuery.unique( data ) : data );
this がドキュメントノードになっていること、変数 ret にp要素ノードのリストが1つの配列として格納されていること、及び ret.prevObject にドキュメントノードが代入されていること等が分かります。
90%近いシェアを握っているインターネットエクスプローラの描画エンジンを利用したタブbrowser。沢山のタブbrowserがあるが、多機能、カスタマイズフリー、スクリプト利用等で一日の長がある。Gekkoエンジンへの対応も行われ、IEからの自立独立の方向に向かっている。2005年7月にはIE7が登場する見通しの中で、今後の発展が望まれる。
多様なCSS作成支援機能を備えた、タグ入力式 HTML&CSS作成支援エディタ。スキンデザインもすっきりしている。テキストエディター上で作成するよりも確実で安全にタグ打ちが出来る。
文字コードを選べないのが欠点。
StyleNote同様のタグ入力式 HTML&CSS 作成支援エディタ。長年使用してきたが現在StyleNoteに乗り換えつつある。
クリップボード履歴情報を活用する為のソフト。画像まで履歴を取ってくれるのが嬉しい。このソフトを使わない日は絶対ない程に重宝し、愛用している。
起動中のウィンドウの「コピーできない」説明文などの文字列を取得し、コピー可能な文字データにするツール。何かと便利。
ストリーミングデータを保存することが出来るソフト。動画利用には不可欠なソフトだ。
無料ながらレイヤー機能を有し、スクリプトによる拡張も可能な、sleipnir作者が提供している優れもの画像編集ソフト。
画面キャプチャソフトと言えばこれに勝るものなし、ではないだろうか? 様々な取得方法を有しており、ブログ作成にもHomepage作成に不可欠だ。Jtrimと並んでWoodyBellsの作品。
複数ファイルの同時編集は出来ないが、透過pngも作れる画像編集ソフト。
(以下当該サイトから抜粋)初心者にも簡単に操作が出来るフォトレタッチソフトです。多くの加工機能で画像に様々な効果を与えることができます。非常に軽快に動作するため、ストレスなく操作できます。
Animation Gifファイルを作れる無料ソフト。
キャプチャソフト。画面内にサイト全体が表示しきれない場合でも、これを使えば全体をキャプチャすることが出来る。
画像処理。画像のフォーマット変換のみならず、色数やサイズ、圧縮率の変更まで一括処理できてしまう『BatchGOO!』は、大量の画像をまとめて処理したいときに大変便利なソフト。BMP, TIFF, JPEG, PCX, PNG の相互変換をはじめ、色数・サイズ・解像度の統一、JPEG圧縮率の調節など、ホームページ用の画像や携帯電話用の壁紙を揃えるのに抜群の相性を見せる。(Vectorの当該ソフト紹介頁より抜粋引用)
名前から直ぐに想像が付くように画像のサイズを測るためのソフトだ。Homepage作成には欠かせない。2カラム、3カラムのレイアウトを行う場合に大変重宝する。
ランチャーソフトは沢山あるが、中でもこれが一押しだ。2年以上使ってきたがその操作性には毎日満足している。これを使い始めてからデスクトップには一切のアイコンを表示することをやめてしまった。
AdobeReader7によって、起動時間が長すぎるという長年のユーザーの不満はある程度解消した。そのためこの高速化ソフトは存在価値が低下してしまったかもしれない。AdobeReader6迄はこのソフトによる起動高速化で恩恵を受けてきた。
IE専用が難点だが、様々なサイト内でIDやパスワードを入力するのに重宝するソフト。コンテキストメニューから簡単に起動できるのがGood! sleipnir等のIEの描画エンジンを利用しているブラウザでも使える。
利用しているパソコンの諸元値を取得するには、このソフトがベストだ。インストール済みソフトの一覧が取得できるのも嬉しい。
WMPは機能が豊富なだけ重い。RealPlayerも同様だ。そこでMedia Player Classicを使いたい。動作が軽快なだけではなく、対応しているファイル形式もすこぶる多く、これひとつで、wmvもrmも表示できてしまうのだから凄い! 数多あるMedia Playerの王様と言えるだろう。
自宅でPCを起動しているときには必ず起動しているメディアプレーヤー。何かと過剰なWinampよりも、起動も速くスキンはシンプルだ。
DivX, Xvid, Mov, Vob, Mpeg, Mpeg4, avi, wmv, dv, などの動画をDVD-Video形式に変換できるフリーソフト。クリックするとDVD関連ソフト紹介サイト=「DVDなToolたち」なるHomepageが開きます。