YUI用寄生ユニット引き継ぎ
2007 ワード
「寄生组合式継承」とは?
構造関数を用いて属性を継承し,プロトタイプ鎖の混成形式により方法を継承した.構造関数+プロトタイプチェーン.
寄生結合式継承は、引用タイプの最も理想的な継承モデルである.
寄生結合式継承の基本パターン
第一歩、超クラスの原型のコピーを作成します.
第二のステップは、作成されたコピーにconstructorの属性を追加し、元のモデルを書き換えることによって失われたデフォルトのconstructorの属性を補います.
第3ステップは、新規に作成したオブジェクト(すなわちコピー)をサブタイプのプロトタイプに割り当てます.
実例「JavaScript高級プログラム設計」 JSタイプは を継承します.
構造関数を用いて属性を継承し,プロトタイプ鎖の混成形式により方法を継承した.構造関数+プロトタイプチェーン.
寄生結合式継承は、引用タイプの最も理想的な継承モデルである.
寄生結合式継承の基本パターン
function inheritPrototype(subType, superType) {
//
var prototype = Object(superType.prototype);
//
prototype.constructor = subType;
//
subType.prototype = prototype;
}
関数内部のプロセス:第一歩、超クラスの原型のコピーを作成します.
第二のステップは、作成されたコピーにconstructorの属性を追加し、元のモデルを書き換えることによって失われたデフォルトのconstructorの属性を補います.
第3ステップは、新規に作成したオブジェクト(すなわちコピー)をサブタイプのプロトタイプに割り当てます.
実例
function SuperType(name) {
this.name = name;
this.colors = ["red", "blue", "green"];
}
SuperType.prototype.sayName = function() {
alert(this.name);
};
function SubType(name, age) {
SuperType.call(this, name);
this.age = age;
}
inheritPrototype(SubType, SuperType);
SubType.prototype.sayAge = function() {
alert(this.age);
};
YUIの寄生ユニット式継承//
function extend(subClass,superClass){
var F = function(){};
F.prototype = superClass.prototype;
subClass.prototype = new F(); // ,
subClass.prototype.constructor = subClass; // constructor superClass, subClass
subClass.superclass = superClass.prototype;//
if(superClass.prototype.constructor == Object.prototype.constructor) {// Object,
superClass.prototype.constructor = superClass;
}
}
//
function Person(name) {
this.name = name;
}
Person.prototype.sayName = function() {
alert(this.name);
};
function Chinese(name,job) {
Person.call(this, name);
this.job = job;
}
extend(Chinese, Person);
Chinese.prototype.sayJob = function() {
alert(this.job);
};
var c = new Chinese("MirrorAvatar", "coder");
alert(c.sayName()); //MirrorAvatar
参考資料: