クラスパッケージ化ツールでのクラスの作り方
とりあえず、コアはこちらです。
http://www2.u-netsurf.ne.jp/~mug/CPT.js
解説書の暫定公開に伴い、整理しました。(06/3/21)
http://d.hatena.ne.jp/Mug/20060321/1142917758
このコアを読み込んだ後、スーパークラスとそのサブクラスを定義し、それぞれのインスタンスを1つずつ作成して動かしてみるサンプル
//--------------------------------------
// SuperClass
Class.create(function(Super) {
var Creator = arguments.callee;
Creator.CompleteName = "SuperClass";
Creator.inherit(Class, Super);
var Static = Class.Static;
var Proto = Class.prototype;
// Private Class Member/Method
var instanceCount = 0;
function countUp() {
return instanceCount++;
} // Public Static Member/Method
Static.MAX_INSTANCE = 20;
Static.getInstanceCount = function() {
return instanceCount;
};
// Public Class Member/Method
Class.intro = "This is an instance of SuperClass.";
// Public Prototype Member/Method
Proto.introduce = function() {
alert(this.constructor.intro);
};
// Constructor
function Class() {
// Private Instance Member/Method
var index = countUp();
// Public Instance Member/Method
this.getIndex = function() {
return index;
};
return this;
}
return Class;
});
//--------------------------------------
// SubClass
Class.create(function(Super) {
var Creator = arguments.callee;
Creator.CompleteName = "SubClass";
Creator.inherit(Class, Super);
var Static = Class.Static;
var Proto = Class.prototype;
// Private Class Member/Method
function createRange(birth, idx, max) {
return ("birth = " + birth.toLocaleString() + "\nrange = " + idx + " / " + max);
}
// Public Static Member/Method
Static.MAX_INSTANCE = 35; // override!
// Public Class Member/Method
Class.intro = "This is an instance of SubClass.";
// Public Prototype Member/Method
// Constructor
function Class() {
Super.apply(this, arguments);
// Private Instance Member/Method
var birth = new Date();
// Public Instance Member/Method
this.speak = function() {
this.introduce();
alert(createRange(birth, this.getIndex(),Static.MAX_INSTANCE));
};
return this;
}
return Class;
}, SuperClass);
//--------------------------------------
// usage
var p = new SuperClass();
p.introduce(); // This is an instance of SuperClass.
var b = new SubClass();
b.speak(); // This is an instance of SubClass. / birth = 2006年3月8日 20:34:40\nrange = 1 / 35
b.introduce(); // This is an instance of SubClass.
alert(SuperClass.Static.getInstanceCount()); // 2
alert(SubClass.Static.getInstanceCount()); // 2