萬盛學電腦網

 萬盛學電腦網 >> 腳本專題 >> javascript >> 再談javascript原型繼承

再談javascript原型繼承

 真正意義上來說Javascript並不是一門面向對象的語言,沒有提供傳統的繼承方式,但是它提供了一種原型繼承的方式,利用自身提供的原型屬性來實現繼承。

原型與原型鏈

說原型繼承之前還是要先說說原型和原型鏈,畢竟這是實現原型繼承的基礎。
在Javascript中,每個函數都有一個原型屬性prototype指向自身的原型,而由這個函數創建的對象也有一個__proto__屬性指向這個原型,而函數的原型是一個對象,所以這個對象也會有一個__proto__指向自己的原型,這樣逐層深入直到Object對象的原型,這樣就形成了原型鏈。下面這張圖很好的解釋了Javascript中的原型和原型鏈的關系。

再談javascript原型繼承 三聯

每個函數都是Function函數創建的對象,所以每個函數也有一個__proto__屬性指向Function函數的原型。這裡需要指出的是,真正形成原型鏈的是每個對象的__proto__屬性,而不是函數的prototype屬性,這是很重要的。

原型繼承

基本模式

 

代碼如下:
var Parent = function(){
    this.name = 'parent' ;
} ;
Parent.prototype.getName = function(){
    return this.name ;
} ;
Parent.prototype.obj = {a : 1} ;

 

var Child = function(){
    this.name = 'child' ;
} ;
Child.prototype = new Parent() ;

var parent = new Parent() ;
var child = new Child() ;

console.log(parent.getName()) ; //parent
console.log(child.getName()) ; //child

 

這種是最簡單實現原型繼承的方法,直接把父類的對象賦值給子類構造函數的原型,這樣子類的對象就可以訪問到父類以及父類構造函數的prototype中的屬性。 這種方法的原型繼承圖如下:

copyright © 萬盛學電腦網 all rights reserved