一、第一種繼承(運用原型鏈)
Grand.prototype.LastName = "姓楊";
function Grand() {
}
var grand=new Grand();
Father.prototype=grand;
function Father() {
var Name="也姓楊、";
document.write(Name);
}
var father=new Father();
Son.prototype=father;
function Son()
{
document.write(this.LastName);
}
var son=new Son();
輸出結果:在son構造中,輸出結果爲:也姓楊、姓楊;
二、第二種繼承(call,apply關鍵字)
function Human(name,sex,age){
this.name=name;
this.sex=sex;
this.age=age;
}
function HumanYang(name,sex,age,address){
Human.call(this,name,sex,age);
this.address=address;
document.write(name,sex,age,address);
}
var human=new HumanYang("楊","男","20","重慶");
輸出結果:楊男20重慶
三、第三種繼承(共有原型、多個構造函數共有一個原型)
father.prototype.lastName="yang";
function father(){
}
function son(){
}
function herinert(Tagert,Object){
Tagert.prototype=Object.prototype;
}
herinert(son,father);
var son=new son();
document.write(son.lastName);
輸出結果:yang;
herinert爲封裝繼承的一個函數,放入函數可實現誰繼承自誰;
第三種模式缺點:在子函數緣原型上加屬性會改變父原型的值
四、第四種繼承(聖盃模式)
father.prototype.lastName="yang";
function father(){
}
function F(){}
f.prototype=father.prototype;
function Son(){
}
Son.prototype=f.prototype;
分析:所謂的聖盃模式就是用一箇中間原型來連接兩個函數;實質形成爲原型鏈;這樣在改動子元素的原型時不會爲父原型加上任何屬性;因爲中間函數沒有任何原型。
繼承封裝方法可以這樣寫:
function inherit(Target,Origin){
function F(){}
F.prototype=Target.prototype;
Origin.prototype=new F()//==Object.prototype=F.prototype
Target.prototype.constuctor=Tragt;
Target.prototype.uber=Origin.prototype;
}
封裝繼承的另外一種寫法,來源於YUI3類庫的一種寫法;
var inherit=(function(){
var F=new function(){};
return function(Target,Origin){
F.prototype=Origin.prototype;
Target.prototype=new F();
Target.prototype.constuctor=Target;
Target.prototype.uber=Origin.prototype;
}
}());