function は、他の言語で言うところの『クラス』のようなものですが、実際の扱いはそんなに簡単ではありません。しかし、少なくともこの二つが『インスタンス』である事は間違いなさそうです。 ですから、jQuery の .data メソッドでエレメントに対して『インスタンス』を保存する事ができるという事なので、以下の記事での改造はそれを利用しています。 使いどころが難しいですが、入力をコンボボックス化する jQuery プラグインの実装が不便だったので、modify しました。そもそも、jQuery のプラグインは、jQuery の インスタンスに対してのメソッドの実装です。プラグインは、jQuery の機能を借りて、そのメソッドが特有の振る舞いをするような『オブジェクト』を window の中に作りだします。 そして、再度そのオブジェクトを操作する為にそのオブジェクトを参照する必要があるので、どこかに保存しなければなりません。 当然、再度参照するなら jQuery の インスタンスを介して( 実際はセレクタで選択されたもの )再度参照されるべきだと思います。 しかし、このプラグインでは単純に配列を作ってそこへ push していただけなので、『何番目に何が居る』かをプログラマは番号で呼び出すようになっていました。 これでは意味が無いので プラグインが作った『オブジェクト』を .data で 元の要素に保存しました。( jQuery で console.log(typeof $("#test")); と実行すると object と表示される )
<script type="text/javascript"> function myJson() { this.prop = "JSON"; } j1 = new myJson(); console.log( typeof j1 ); console.dir( j1 ); j2 = { prop: "JSON" }; console.log( typeof j2 ); console.dir( j2 ); </script>
さらに、new でインスタンスが作成された時に、プロパティとして持っているものは function 内で this で定義する事になっていますが、これは、function の名前に対する prototype に インスタンスをセットしてもいい事になっているので、こんな書き方ができる事になります。
<script type="text/javascript"> function myJson1() { } function myJson2() { this.prop = "JSON"; } myJson1.prototype = new myJson2(); j1 = new myJson1(); // 本体にプロパティは無い console.dir( j1 ); // プロトタイプに prop があります console.log( j1.prop ); // JSON と表示される </script>
さらに、ほんの少し書き方が違いますが、以下のようにしても同じ結果を得る事ができます。 call メソッドは、他の『クラス』の実際に記述されているプロパティに対して効果があるので、継承したいプロパティは function 内に書いておく必要があります。 つまり、結果が同じようでいて、JSON フォーマットの記述である『オブジェクト』ではできない事が function で書くと可能になるという事です。
<script type="text/javascript"> function myJson1() { myJson2.call( this ); } function myJson2() { this.prop = "JSON"; } j1 = new myJson1(); // 本体にプロパティは無い console.dir( j1 ); // 本体に prop があります console.log( j1.prop ); // JSON と表示される </script>
タグ:javascript JSON
|
【JavaScript オブジェクトの最新記事】
- JavaScript : window オブジェクトのプロパティとしてグローバル変数を定義する
- ほぼ、Google Chrome 限定ですが Web Speech API の現時点での実装と問題点回避方法
- Google Chrome での音声認識処理
- JavaScript でテーブル要素の td をクリックしてテキストを選択する / Range オブジェクト
- Google Chrome で音声認識の結果をブログの投稿テキストエリアに転送するブックマークレット
- JavaScript の String と Date オブシェクトに、9999/99/99 書式の文字列日付を取り出すメソッドを追加する
- JavaScript オブジェクト作成の4態
- JavaScript による半角と全角の相互変換(カタカナを除く)完成版
- Three.js で行われている整然としたクラス作成
- JSON オブジェクトの stringify メソッドの第3引数の使い方
- JS : 自分用名前空間を使ってページのロードイベントを登録
- Object.prototype が window オブジェクトに適用されるおはなし
- JS : クロスドメインの IFRAME からデータを JSON 形式で引き渡す
- JavaScript : 右から指定した文字数を取りだす right メソッドを String オブジェクトに追加
- JSON と文字列の関係
- JavaScript : ネームスペースの作成
- JavaScript : HTMLの要素内のイベント記述で複雑な処理を書く方法( 関数を定義したく無い場合 )
- JavaScript : 無名関数(メソッド)の実行
- JavaScript : Numberオブジェクトに16進数文字列に変換して指定した長さで前にゼロを付けるメソッドを追加する
- JavaScript : String オブジェクトの replace メソッドの第二引数に関数を指定する一括置き換え処理