クラス(class)
DESC
言語構文にはクラスはないが Object 型に任意のプロパティを設定することで
クラスの機能を実装できる。
var o = {};
// attribute を追加
o.test = 1;
// attribute を削除
delete o.test;
// 関数オブジェクトを attribute に指定することで メソッドらしく利用する。
o.method = function() { return o.test + 1 }
o.method();
コンストラクタもどきの関数を作成して Object を返す。
function create( i ) {
// メンバ変数とメソッド
o.test = i;
o.method = function() { return o.test + 1 }
return o;
}
var o = create( 10 );
o.method();
new
SYNTAX
new constructor[( [arguments] )]
POINT
上のコンストラクタもどきの処理を new 演算子を使うことで自動化できる。
new 演算子は次の処理を実行する
[.] メンバを持たないオブジェクトを作成して、その参照を返す。
[.] 次に作成したオブジェクトを this ポインタとしてコンストラクタ関数にわたしてコールする。
new 演算子をつかうと次のように簡略化できる。
// コンストラクタ関数
function MyObject( i )
{
// new 演算子によって作成された Object の参照は this として渡される。
this.test = i;
this.method = function() {
return o.test + 1;
}
}
var o = new MyObject( 10 );
o.method();
コンストラクタは、指定された引数でオブジェクトを初期化できる。
// メンバをもたない Object を作成
var o = new Object;
var a = new Array();
// 指定した引数で初期化
var d = new Date( "Jan 5 1996" );
クラスメソッド
function Object()
{
// instance 変数
this.i = 10;
this.s = "test";
// class 変数として 関数を設定する
Object.prototype.print = function() {
p( "call method" );
p( this.i );
p( this.s );
}
}
{
var o = new Object();
o.print();
}
function() を使ってクラスを定義する。
function Command( path )
{
// メンバ変数
this.path = path;
// メンバ関数
this.run = function() {
WScript.echo( "run path = " + path );
}
}
利用する。
var cmd = new Command( "d:/test.txt" );
cmd.run();