07 | 2007/08 |  09

  1. 無料サーバー

search phpbb-phpbb-FC2BLOG-Info-Edit Template-Post-Edit-Upload-LogOut

CSSやJavascript自習の苦闘史を綴っていきたい。恐縮ですがJavascriptを有効にしてご覧ください。
2005年12月から社会問題も掲載!


jQueryのobject拡張方法をやっと解明!

それは10日夜からの足かけ5日間の苦悩の末に突如開けた!

jQueryの使い方は簡単ですが、そのコードを理解することは私にとっては大変難しいものでした。そうなのです。過去の4日間、「どうしてあのようにしてobjectを拡張できるのだろうか?」───とずっと悶々としてきました。

それが極めて初歩的な方法ですが、jQueryのコードの中で分かりにくい箇所にalert関数を追加し、その進行過程を取りだし分析する、と言う方法で解明することが出来ました。嬉しい!!

ここでは解明できた、jQuery におけるobjectそのものの拡張方法について綴ってみようと思います。

まず苦闘してきたコードの該当箇所を抽出しておきます

それは次の2つのコードです。jQuery オブジェクト自身を拡張している箇所です。最初は、prototypeプロパティにおいて引数を操作し、かつそれをjQuery.extendメソッドに複写しています。

次にこの複写されたjQuery.extendメソッドを、無名オブジェクトつまり{name1:func1,name2:func2,……}をたった一つの引数として定義し、実行しています。

ここで難解だったのは、jQuery.extendメソッドがたった一つの引数(その引数オブジェクトは多数のキーと値をもつプロパティが定義されてはいるが、jQuery.extendメソッドの引数はあくまでもたった1つの無名オブジェクト {} だけです)しかとらない場合でも、prototypeプロパティ定義部の、whileが有効に働き、しかも jQuery.extendメソッドのたった一つの引数となったオブジェクトに定義されている多数のプロパティが、そのキー名と一緒にtarget配列に順番に代入されていることでした。(iがキー名でありprop[i]がプロパティの値となっています。)

この時点ではまだx++と++Xの差異について極めて初歩的なことであるにも拘わらず認識していませんでした。その結果次の段のような疑問を持ってしまったのです。以下打ち消し線部分はx++の動作について誤った認識をしていた時点で書いてもので、明らかに内容が間違っていることを示しています。

引数オブジェクトの中のプロパティのキー名と値をargumentsオブジェクトを利用して取りだしているわけで、どうしてこんなことが出来るのだろうか、ずっと頭を悩ましていました。

しかし、いくらコードを睨み付けて思案してみても、解明できるほどの知識はありません。

そこでalertをjQuery.jsのあちこちに挿入し、動く過程をチェックしてみました。

▲ToTop

そして分かったのです。argumentsオブジェクトの独特の利用法が!

引数オブジェクトの中に定義されているプロパティを、次の部分のコードによって巧みに取りだしているということ、及びその取り出し方が理解できたのです。

それはこれまでに遭遇したことのないargumentsオブジェクトの使い方であり、極めて独創的に思えました。Javascript1.5なり1.6なりで新たに定義され拡張されたargumentsの仕様なのかどうか、皆目知りませんが、こうした方法で引数オブジェクト内のプロパティを抽出できることは大変な驚きでした。

for in ループによってオブジェクト内のプロパティを順番に取り出すこの方法は、何のことはない、prototype.jsにも使われているありきたりのコードでした。

早速例題を作ってみました。

それは以下のような短いコードです。

上のコードをfirebugでテストしてみた所、最初にarguments[0]がオブジェクトとしてalertされ、続いてobjの5つのプロパティのキー名と値、並びにxの値(5回とも1でした)が順番にalertされたのです。

こうして存在しない2番目の引数(arguments[1])を利用して、arguments[0]オブジェクト内のプロパティを取りだしていることが理解できました。

どうしてこのような動作が可能となっているのかはargumentsオブジェクトの仕様上の問題かな、と思いつつ釈然としないままに、一応jQueryのオブジェクト拡張方法を何とか理解したのでした。

コメントによる指摘を戴くまでは、頭からa++をインクリメントしてから代入すると決めてかかっていました。ポストインクリメントというらしいのですが(++aはプリインクリメントと呼ぶらしい)、これまでさんざん forループ内でi++を使ってきたにも拘わらず、プリインクリメントと勘違いして頭を悩ましてしまったのでした。 (☆-◎;)ガーン !

 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が開きます。