將原型鏈作為實現繼承的主要方法。其基本事項就是利用原型讓乙個引用型別繼承另乙個引用型別的屬性和方法。
實現的基本方式就是,讓子類原型物件,等於父類物件的乙個例項。
*每個例項都包含指向乙個指向原型物件的指標。*我們讓原型物件等於另乙個型別的例項
**/function
supertype()
supertype.prototype.getsupervalue = function
();
function
subtype()
//繼承supertype
/*讓subtype的原型等於supertype的例項,supertype物件的例項屬性[[prototype]],又指向
supertype的原型.所以順著原型鏈,subtype的例項可以訪問,supertype的原型。
*//*
所有函式的預設原型都是object的例項。因此預設原型都會包含乙個內部指掙,指向object.prototype
* */
subtype.prototype = new
supertype();
subtype.prototype.getsubvalue = function
();
var instance = new
subtype();
alert(instance.getsupervalue());
也會出現點小問題,如下例:
unction aaa()aaa.prototype.showname = function
();
function bbb()
bbb.prototype = new
aaa();
bbb.prototype.constructor =bbb;
var b1 = new
bbb();
var b2 = new
bbb();
b1.name.push(
4); console.log(b2.name); //結果b2裡也有4
改進方法:
//要做屬性和方法繼承的時候。要分開繼承
function
aaa()
aaa.prototype.showname = function
();
function
bbb()
var f = function
(){}; //建立這個da大f的作用是只繼承方法,不繼承屬性
f.prototype =aaa.prototype;
bbb.prototype = new
f();
bbb.prototype.constructor =bbb;
var b1 = new
bbb(); //然後你每次new bbb()的時候, 都相當於重新new aaa(),所以是兩個不同的物件,因此 this.name不會被影響。
var b2 = new
bbb();
b1.name.push(4);
console.log(b2.name);
JS 繼承 類式 與 原型式
1.類式繼承 先宣告乙個超類 function person name 給這個超類的原型物件上新增方法 getname person.prototype.getname function 例項化這個超 var a new person darren1 console.log a.getname da...
js實現類繼承
為了讓自己能把繼承的實現機制理解得更透徹,還是決定看能不能通過自己的理解講述出來,以下文章如有不妥之處請積極批評指正,感激不盡。我們知道js中一切皆物件,但是當我們把流行的物件導向的語言特性套到js身上時卻略顯尷尬,為啥?js沒有提供繼承機制,這個得我們自己動手來模擬實現。不管是傳統的方法還是所謂的...
js類的繼承
如何實現類的繼承呢?有如下2個建構函式 function peopleclass peopleclass.ptototype function studentclass name,function peopleclass peopleclass.ptototype function studentc...