【オブジェクト指向っぽく無く理解する】 オブジェクト

はじめに

 見方を変えれば理解度も違うと思っての一言アドバイスです。わたしなりにこう解釈したらピンと来た!という事を述べていくシリーズです。

結論: オブジェクトって配列そのもの

 例によって分かってる人向けに結論でした。終了。以下解説です。

 「配列はオブジェクトである。」というのは入門書でよく見る記述ですが、乱暴に単純化して「オブジェクトは配列である。」としてみましょう。

 仮にプロパティとメソッドが存在する”ObjA”というオブジェクトがあるとします。

プロパティ、メソッドそれぞれにアクセスする方法は下記の通り。

ObjA.property1;
ObjA.method1();

ちなみに、メソッド名後ろのカッコを取って、

ObjA.method1;

とやるとメソッドのソースコードがドバッと展開されます。

連想配列で考える

 では連想配列でスクリプトを組んでみます。WScript.Echo(); の中身は1行目がオブジェクト指向チックにドット演算子を使った場合で、2行目が配列チックに[]演算子を使っております。

 プロパティは所詮変数に過ぎないので、肝はメソッドの部分です。以下の書き方をしています。

aryObjB.method1     又は  aryObjB["method1"];       // コードを展開
aryObjB.method2();  又は  aryObjB["method2"]();     // 関数実行

 論より証拠。下記のコードを拡張子.jsのテキストファイルにコピぺしてエクスプローラー上でダブルクリックすると実行できます。

var aryObjB = {propaty1:3 , propaty2:"abcd", method1:function(){return 'AAA'}, method2: function(){return 'BBB'} };
WScript.Echo(
          aryObjB.propaty1   ,"\n"+ aryObjB.propaty2   ,"\n"+ aryObjB.method1   ,"\n"+ aryObjB.method2()
  ,"\n\n"+aryObjB["propaty1"],"\n"+ aryObjB["propaty2"],"\n"+ aryObjB["method1"],"\n"+ aryObjB["method2"]()
);


一次元配列にして実行

 では、普通の一次元配列で前述の連想配列のコードを書き直してみましょう。普通の配列ではドット演算子は使えないので[]演算子で要素を参照します。いきなりコードで紹介。

var aryObjA = new Array( 1, "abcd", function(){return 'AAA'}, function(){return 'BBB'});
WScript.Echo(
  aryObjA[0],"\n"+ aryObjA[1],"\n"+ aryObjA[2],"\n"+ aryObjA[3]()
);

是非実行してみてください。
初めて実行したとき、大爆笑してしまいました。

プロパティもメソッドもただの式

 ついでに。別記事に分けると内容被りそうなので追記します。

 再び一般的な入門書から。オブジェクトはモノ、プロパティは属性、メソッドは振る舞いとか説明されますが、違いが解らず混乱して来ませんか? わたしはダメでした。

 でも上記の様に配列の要素に数値も文字列も関数もぶち込める事を考えると、少なくともプロパティとメソッドって使い方が違うだけなんだなぁ、と感じます。




この記事が気に入ったらサポートをしてみませんか?