原型繼承 - 寫(xiě)所以我有這兩個(gè)例子,來(lái)自javascript.info:例1:var animal = { eat: function() { alert( "I'm full" ) this.full = true }}var rabbit = { jump: function() { /* something */ }}rabbit.__proto__ = animal rabbit.eat() 例2:function Hamster() { }Hamster.prototype = { food: [], found: function(something) { this.food.push(something) }}// Create two speedy and lazy hamsters, then feed the first onespeedy = new Hamster()lazy = new Hamster()speedy.found("apple")speedy.found("orange")alert(speedy.food.length) // 2alert(lazy.food.length) // 2 (!??)從示例2開(kāi)始:當(dāng)代碼到達(dá)時(shí)speedy.found,它找不到found屬性speedy,因此它爬上原型并在那里進(jìn)行更改。這就是為什么food.length兩只倉(cāng)鼠都是平等的,換句話(huà)說(shuō),它們有相同的胃。據(jù)我所知,在編寫(xiě)和添加一個(gè)不存在的新屬性時(shí),解釋器將上升到原型鏈,直到找到屬性,然后更改它。但是在示例1中還發(fā)生了其他事情:我們運(yùn)行rabbit.eat,這會(huì)發(fā)生變化rabbit.full。full屬性無(wú)處可尋,所以它應(yīng)該上升到原型鏈(對(duì)象??),好吧,我不知道這里發(fā)生了什么。在此示例中full,rabbit創(chuàng)建并更改了屬性,而在第一個(gè)示例中,它上升了原型鏈,因?yàn)樗也坏綄傩?。我很困惑,也看不出為什么?huì)這樣。
原型繼承 - 寫(xiě)
德瑪西亞99
2019-05-21 13:54:43