Class.createをちょっと便利にしてみた。

prototype.jsは読み込まないけど、Class.create()構文が使いたい場合、以上のようなコードを書いてやれば使えるようになる。
今回は継承もできるようにしてみた。

// Class.createを可能にするための仕掛け
var Class = {create:function(proto, protoAppend){
	var klass = function(){
			if (this,arguments.length==1 && this,arguments[0] == "base_class") { return; }
			this.initialize && this.initialize.apply(this,arguments);
		}
	klass.prototype = proto;
	for (i in protoAppend) { klass.prototype[i] = protoAppend[i]; }
	return klass;
}};

// 親クラスを定義
var Animal = Class.create({
	initialize: function(){
		WScript.echo('init animal');
	},
	action: function(){WScript.echo('animal!');}
});

// 継承したクラスを定義
var Dog = Class.create(new Animal("base_class"), {
	initialize: function(){
		WScript.echo('init dog');
	},
	action: function(){
		WScript.echo('bow');
	}
});

var Cat = Class.create(new Animal("base_class"), {
	initialize: function(){
		// super.initialize
		Animal.prototype.initialize.apply(this, arguments);
		WScript.echo('init cat');
	},
	action: function(){
		WScript.echo('nya');
	}
});

// テスト実行
a = new Animal();
a.action();

d = new Dog();
d.action();

c = new Cat();
c.action();