クラスパッケージ化ツールでのクラスの作り方

とりあえず、コアはこちらです。
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