alzuiパッケージの進化過程(続)--継承機構と_を含むsuperキーワード
2602 ワード
11、クラスの形式定義を振り返ってみます.(ルートの雛形は基本的に形成されています.)
_にありますclass関数の2番目のパラメータ位置には、現在のクラスの親クラスを参照するためのパラメータsuperClassを追加し、2番目の位置に置くことが目的であり、主にjavaのクラス定義形式との対照関係を生成するためです.
_class("AObject", function(){
this._init = function(){
this._disposed = false;
};
// ,
this.dispose = function(){
this._disposed = true;
};
});
12、設計ベースクラスの目的は継承のためであり、基礎サポートコードを調整して継承をサポートする必要がある._にありますclass関数の2番目のパラメータ位置には、現在のクラスの親クラスを参照するためのパラメータsuperClassを追加し、2番目の位置に置くことが目的であり、主にjavaのクラス定義形式との対照関係を生成するためです.
//---- ----
function __newClass(){
return function(){
this._init.apply(this, arguments);
};
}
function _class(className, superClass, classImp){
if(superClass === null){
// null, Object( AObject Object)
superClass = Object;
}else if(superClass === ""){
// "", AObject, , , !
superClass = window["AObject"];
}
var clazz = __newClass();
clazz.prototype = new superClass(); //
window[className] = clazz;
classImp.apply(clazz.prototype);
}
//---- ----
_class("AObject", null, function(){
this._init = function(){
this._disposed = false;
};
this.dispose = function(){
this._disposed = true;
};
});
13、継承メカニズムが実現されました.以下は父親の同名の呼び方を簡単に呼び出す方法です.スーパーキーワードが登場
function __newClass(){
return function(){
this._init.apply(this, arguments);
};
}
function _class(className, superClass, classImp){
if(superClass === null){
superClass = Object;
}else if(superClass === ""){
superClass = window["AObject"];
}
var clazz = __newClass();
clazz.prototype = new superClass();
var _super = superClass.prototype; // _super
window[className] = clazz;
classImp.apply(clazz.prototype, [_super]);
}
_class("AObject", null, function(){
this._init = function(){
this._disposed = false;
};
this.dispose = function(){
this._disposed = true;
};
});
// , AObject
_class("ClassA", "", function(_super){
this._init = function(){
_super._init.call(this);
this._name = "ClassA";
};
this.dispose = function(){
// , , ,
// !
_super.dispose.apply(this);
};
});
先にこれらを書きましょう.パッケージ全体の進化過程はもう歴史です.思い出したいのはちょっと難しいです.