オブジェクト
JavaScriptでは、データ、変数、イメージ、ウィンドウ、ブラウザなどを全て「オブジェクト」として取り扱います。
各オブジェクトにはそれぞれ固有の性質と動作がありこれらを「オブジェクトのプロパティ」「オブジェクトのメソッド」
として扱っています。
別の言い方をすれば、JavaScriptは「オブジェクト」以外のものを取り扱わないことになります。
1 JavaScriptでのオブジェクトの階層
C++, Javaのようにクラスの継承はありません。
JavaScript システムはブラウザでのウィンドウを下記のようなwindowオブジェクト階層として見ています。
従って、JavaScript内でdocument, frame等を参照するとき、window.documentのように「.」でつないで表示します。
2 組み込みオブジェクト
数値オブジェクト、日付オブジェクト、配列オブジェクトなと゜JavaScript自身で用意しているオブジェクトです。
3 オブジェクトのプロパティ
例えば、テキストオブジェクトが持っている特性、テキスト色、テキストフォントなどをオブジェクトのプロパティと
云います。
オブジェクトのプロパティを参照するには
オブジェクト.プロパティとピリオドでつないで参照します。
objectname.property;
または
objectname["property"];
4 オブジェクトのメソッド
オブジェクトの挙動、関数をオブジェクトのメソッドと云います。
例えば、「鳥」オブジェクトが規定できるメソッドに「飛ぶ」関数を定義することができます。
ダチョウオブジェクトに対し、「飛ぶ」関数を定義でません。 受理されないと云います。
オブジェクト指向プログラムでは色々なオブジェクトに対し、それぞれのメソッドを定義し、プログラムの中で使用
することができます。
この場合、異なったオブジェクトに対し同じメソッド名でそれぞれ定義することができます。名前が同じでも、対象とする
オブジェクトが異なれば、別々の動作をすることになります。
オブジェクト指向プログラミングでは同じメソッド名で異なるオブジェクトのメソッド定義することが頻繁に行われます。
例えば「+」と云うメソツドを考えます。
「+」は2項演算子で数値データに対し適用されます。
3.14 + 56
のように使用します。この場合、3.14は浮動小数点データ、56は整数データと異なったデータ形式を持つデータを「+」で
結合していることになります。この場合、数値オブジェクトに対し、「+」を定義しているため正しい結果を得ることができます。
オブジェクト指向プログラミング以前では、定義する関数、メソッド名は全て別々の名前を与えなければならず、
関数名、メソッド名の爆発的増加を招くことになつていました。
通常の実世界では「+」の両辺が数値であれば「足し算」何ら支障がないはずです。見た目で判断できるようにすべきと考えた次第です。オブジェクト指向プログラミングはこのプログラムと実世界の隙間を埋めることができます。
ユーザにとってFloatingAdd, IntegerAdd, 等沢山の関数名を覚える必要がなく、只「+」だけを覚えれば良いことになります。
5 オブジェクトのクラス
JavaScriptはJava、C++のように厳格な型指定を持つクラス定義はありません。
JavaScriptでは関数をオブジェクトとしてnew演算子で生成(これをコンストラクタと云います。)したものが「クラス」に相当します。
しかし、C++のようなクラス定義の中でプロパティ、メソッドを定義するような方法はありません。
JavaScriptのプロパティはより自由度が高く、ダイナミックに追加ができます。
例
function foo(x1, x2, ...){
文
}
関数定義で、その関数を直接アクセスする場合、通常の関数の働きをします。
関数をオブジェクトとして考え、
var f = new foo(....);
のようにコンストラクタでオブジェクトを生成することができます。
(1) オブジェクトのデータ型
JavaScriptはobjectデータ型をサポートしますが、JavaScript変数は色々なデータ型を受け入れてくれます。
(2) JavaScriptオブジェクトのプロパティ
例1
function foo(x, y){
this.prop1 = x;
this.prop2 = y;
.....
}
関数fooオブジェクトのプロパティはprop1, prop2です。thisはこのオブジェクトを生成した変数を指します。
var a = new foo(3, 4);
....
a.prop1;
.....
のように生成したオブジェクトaのプロパティとして使用することができます。
例2
function func2(){
func2.prop3;
.....
}
prop3はプロパティです。
(3) JavaScriptオブジェクトのメソッド
関数定義でユーザオブジェクトを定義しているjavaScriptではメソッドも関数定義で組み込みます。
例3
function foo(x, y){
var t = Math.sqrt(x * x + y * y);
return t;
}
function triangle(){
var s = prompt("input x, y = " ,"");
var ss = s.split(",");
var ob = Math.sqrt(ss[0] * ss[0] + ss[1] * ss[1]);
this.olength = ob; // 長さ はtriangleのプロパティです。
ss[0] = parseFloat(ss[0]);
ss[1] = parseFloat(ss[1]);
this.blength = ss[0]; // 底辺 はtriangleのプロパティです。
this.hlength = ss[1]; // 高さ はtriangleのプロパティです。
}
オブジェクトメソッド利用例
function objMethodTest(){
var tri = new triangle;
document.write("底辺 = " + tri.blength + "<br>");
document.write("高さ = " + tri.hlength + "<br>");
document.write("斜辺 = " + tri.olength + "<br>");
}
method1はfunc3のメソッドとして使用することができます。method1はfooと同じ働きをします。
4 JavaScript オブジェクトのメソッド
(1) toString()
JavaScriptは色々なデータ型をサポートします。数値データをテキスト文字列に変換するとき、toStringを使用します。
var str = object.toString(basis);
object 変換対象となる数値オブジェクトなど
basis 変換の基数 =10, 10進数、=16, 16進数、 =8, 8進数、=2, 2進数 文字列で変換します。
指定しないとき、10進数で変換します。
objectが数値でないとき、そのオブジェクトに該当するテキスト文字列が返されます。
例
var x = prompt("数値データを入力 = ", "");
x = parseFloat(x);
var s10 = x.toString();
var s16 = x.toString(16);
var s08 = x.toString(8);
var s02 = x.toString(2);
with(document){
write("input x = " + x + "<br>");
write("s10 = " + s10 + "<br>");
write("s16 = " + s16 + "<br>");
write("s08 = " + s08 + "<br>");
write("s02 = " + s02 + "<br>"); }