JavaScriptでオブジェクト指向しよう2・クラス


     さて、クラスを作ります。
     前回のcharaクラス(構造体)の中身にはnameとageという「プロパティ」が入っていました。クラスは、中身に変数だけでなく「メソッド」も持ちます。
     メソッドというのはデータをただ持っているだけでなく、加工も行ったりします。データの加工以外にも、動作に関連することを引き受けてくれます。つまり関数というやつですね。メソッドが関数で、プロパティは変数です。
     ということでcharaクラスに一つメソッドを付け加えます。メソッドsex()です。わあ。ちょっとドッキリ。性別ね、性別。引数、つまり入力する値は、1、2というIDを入れて、1なら男、2なら女っていう文字列を返してあげるというメソッドです。
     下の赤字の部分、キャラクターのデータの入力項目が一つ増えていますね。この増えた部分を、下のcharaクラスではsex_idというプロパティとして受け取っています。
     そして下、charaクラスにも青字の部分のようにsex_idとsex()が書き加えられています。ああ。連呼するの嫌だなぁこの名前。

    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function main(){
    	no=new Array();		//オブジェクトを入れる配列
    	cnt=0;			//カウンタ
    
    	no[0]=new chara("Will", 18, 1);	//ウィル 18歳 男
    	no[1]=new chara("Sophia", 16, 2);	//ソフィア 16歳 女
    	no[2]=new chara("Dilt", 19, 1);	//ディルト様 19歳 男
    	no[3]=new chara("Cailtag", 23, 1);	//カイル 23歳 男
    	no[4]=new chara("Lute", 23, 1);	//リュート 23歳 男
    
    	for(cnt in no){		//配列noいっぱいまでループ
    		document.write(no[cnt].name +" ");	//名前を表示
    		document.write(no[cnt].age +" ");	//年齢を表示
    		document.write(no[cnt].sex(no[cnt].sex_id) +"<BR>");	//性別を表示
    	}
    }
    
    ////////// charaクラス /////////////////////////////////////
    function chara(name, age, sex_id){ 	//コンストラクタ(もどき)
    	this.name=name;			//名前
    	this.age=age;			//年齢
    	this.sex_id=sex_id;		//性別ID
    	this.sex=chara_sex;		//性別
    
    ////// メンバ関数(メソッド) sex()
    ////// 性別IDから該当する性別(文字列)を返す
    	function chara_sex(id){ 
    		str="";
    		switch(id){
    		case 1:	str="Male";		//性別ID=1 男性
    			break;
    		case 2:	str="Female";		//性別ID=2 女性
    			break;
    		}
    		return str;
    	}
    }
    //-->
    </SCRIPT>
    

    そしてメソッドsex()の本体が緑字の部分。ここではchara_sexと名付けられていますが、chara内で

        this.sex=chara_sex;

    と書かれることで、これは、charaクラスのsex()として扱われます
    ではこれを実行してみましょう。

    というように、1を入れたデータは"Male"、2を入れたデータは"Female"と表示されるようになります。


【1・構造体】 【INDEX】  【3・継承(1)】