JS 原型和原型鏈

2021-08-23 12:35:33 字數 1245 閱讀 5762

先宣告乙個建構函式

function people(name,age)
把類的方法寫在建構函式原型物件中,子類就不能再通過呼叫父類建構函式來繼承方法(屬性還是可以繼承)

// 給people的原型新增方法

people.prototype.speak = function()

// 建立子類繼承people

function man(name,age,huzi)

(people和man的屬性和方法都可以輸出和呼叫檢視,**裡就不展示測試**了)

這時候怎麼讓man去繼承people的方法?

man.prototype = people.prototype;

man.prototype.smoke = function()

然而這樣並不對!不能直接把子類的prototype指向父類的prototype,這樣會導致兩個建構函式共用乙個prototype,其中的方法父類子類的物件都可訪問,而正確的情況應該是子類可以訪問父類的方法,而父類不能訪問子類的方法

物件的原型也是物件,所以原型也有原型.

當訪問乙個物件的方法時,如果物件中存在則直接訪問,如果不存在則在物件的原型中尋找,有則訪問,沒有則在原型的原型中尋找,如果還沒有則繼續網上尋找,直到找到object位置

object是乙個類(建構函式),這個類的物件的原型沒有原型

物件的原型,與原型的原型組成的鏈式結構叫做原型鏈

子類要繼承父類的方法,則需要把子類的建構函式的prototype物件的原型(__proto__)設定為父類建構函式的prototype

那麼就是這麼寫:

man.prototype.__proto__ = people.prototype;
這樣寫可以,但官方給的有個更好標準的寫法(這樣寫並沒錯)

// object.create用於指定原型建立乙個物件(空物件)

man.prototype = object.create(people.prototype);

man.prototype.smoke = function()

子類繼承父類時,除了可以擴充套件新的方法,還可以重寫父類已有的方法,當使用子類物件呼叫重寫的方法時,會執行子類自己的方法

man.prototype.speak = function()

JS原型和原型鏈

建立建構函式 function word words word.prototype 建立例項 var w new word hello world w.print function w.print hello world w.alert hello world function.prototype....

js原型鏈和原型

1 原型 在js中一切皆物件,那原型也是乙個物件,通過原型可以實現物件的屬性繼承,js的物件中包含著乙個 prototype 內部屬性,這個屬性所對應的就是物件的原型。prototype 作為物件的內部屬性不能被直接訪問,所以為了方便檢視乙個物件的原型,提供了 proto 這個非標準的訪問器,在js...

js原型和原型鏈

一 從圖理解js原型與原型鏈 紅色部分 1 所有函式都有乙個prototype指標,指向原型物件,prototype指標的意義是 當我們使用這個建構函式new出新物件的時候,新物件的原型是誰。2 建構函式的prototype所指向的原型物件有乙個constructor指標,指回建構函式constru...