====== クラスの作り方 ====== ===== クラスの宣言 ===== JavaScriptでクラスを作る場合、function命令を使いそれっぽく実装します。 function クラス名(コンストラクタに渡すパラメータ) { } function test_t(param1,param2) { } ===== コンストラクタとデストラクタ ===== クラスをnewすると上から実行されることを利用し、コンストラクタの代わりにします。\\ デストラクタは実装する手段がありません(開放処理が不要な言語なのでなくても問題ない)。 function クラス名(コンストラクタに渡すパラメータ) { { // コンストラクタ } } ===== publicな関数と、privateな関数 ===== publicな関数にはthisを付けます。 function test_t(param1,param2) { { // コンストラクタ } this.public_func = function() { // thisを付けるとpublicな関数 } private_func = function() { // thisがないとprivateな関数 } } ===== publicな変数と、privateな変数 ===== 関数と同じように、publicな変数にはthisを付けます。var は付けない。 function test_t() { var num1 = 123 ; this.num2 = 456 ; this.dump = function() { document.write("num1=" + num1 + "
num2=" + this.num2 + "
") ; } }
var test = new test_t() ; test.dump() ; num1=123 num2=456 test_tクラスを作成し、dump関数でnum1、num2値を表示。\\ クラス内から値が参照可能なので、正しい値が表示される。 document.write("num1=" + test.num1 + "
num2=" + test.num2 + "
") ;
num1=undefined num2=456 クラスの外から値を参照した場合、thisが付いていないnum1は参照できず\\ undefined(未定義)と言われます。 test.num1 = 12 ; test.num2 = 45 ; test.dump() ; num1=123 num2=45 クラスの外から、num1、num2の値を書き換えて、dump関数で書き換わったか確認。\\ num2はpublic(外部参照)なので正しいく書き換わりました。\\ num1は書き換わらず、this.num1が新規に作られてしまいます。 document.write("num1=" + test.num1 + "
num2=" + test.num2 + "
") ;
num1=12 num2=45 再度クラスの外から値を表示してみると、書き換えた値が表示されます。\\ this.num1、this.num2 が表示されるためで、本来の値のnum1ではない。 ===== クラスの雛形 ===== //***************************************************************************** // サンプルクラス //***************************************************************************** function sample(param) { //------------------------------------------------------------------------- // 外部に公開(変数) //------------------------------------------------------------------------- this.pub ; //------------------------------------------------------------------------- // 外部に非公開(変数) //------------------------------------------------------------------------- var local ; //------------------------------------------------------------------------- // 外部に公開(関数) //------------------------------------------------------------------------- //--------------------------------------------------------------------- // コンストラクタ //--------------------------------------------------------------------- { } //--------------------------------------------------------------------- // //--------------------------------------------------------------------- this.func = function(param) { } //------------------------------------------------------------------------- // 外部に非公開(関数) //------------------------------------------------------------------------- //--------------------------------------------------------------------- // //--------------------------------------------------------------------- func = function(param) { } } ; // function sample