關於js中的類式繼承
阿新 • • 發佈:2019-04-21
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);
//父類 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]
關於js中的類式繼承