1. 程式人生 > >關於js中的類式繼承

關於js中的類式繼承

trac actor 修正 ack proto this name 影響 關於

//父類 function Aa(){ this.name="小名"; }; Aa.prototype.showName=function(){ return this.age=10; }; //子類 function Bb(){ }; Bb.prototype=new Aa();//實現繼承 var b1=new Bb(); alert(b1.name);//小名 //-----------------------------------------------------------------------------
//上面的繼承有幾點問題:1.constractor的指向被改變了 alert( b1.constructor ); // 彈出結果為: function Aa(){ this.name="小名"; }; //所以 constractor的指向被改變了;修正指向 Bb.prototype = new Aaa();//這個就叫做類式繼承 Bb.prototype.constructor=Bb;//修正指向問題 //-----------------------------------------------------------------------------
// 2.子類可以改變父類的屬性 //如果上面的代碼改成
//父類 function Aa(){ this.name=[1,2,3]; }; //子類 function Bb(){ }; Bb.prototype=new Aa();//實現繼承 var b1=new Bb(); b1.name.push(4); var b2=new Bb(); console.log(b2.name);//[1,2,3,4]
//----------------------------------------------------------------------------- //此處的b1 b2相互影響了,改變了父類函數Aa,所以是有問題的,上面的代碼可改成: //父類 function Aa(){ this.name="小名"; }; Aa.prototype.showName=function(){ return this.age=10; }; //子類 function Bb(){ }; var F=new f(); F.prototype=Aa.prototype;//此處只能傳遞方法,沒有辦法傳遞屬性 var b1=new Bb(); Bb.prototype=new F();//把F的實例賦給Bb的原型 console.log(b1.age);

關於js中的類式繼承