原型继承 - 写
所以我有这两个例子,来自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 one
speedy = new Hamster()
lazy = new Hamster()
speedy.found("apple")
speedy.found("orange")
alert(speedy.food.length) // 2
alert(lazy.food.length) // 2 (!??)
从示例2开始:当代码到达时speedy.found,它找不到found属性speedy,因此它爬上原型并在那里进行更改。这就是为什么food.length两只仓鼠都是平等的,换句话说,它们有相同的胃。
据我所知,在编写和添加一个不存在的新属性时,解释器将上升到原型链,直到找到属性,然后更改它。
但是在示例1中还发生了其他事情:
我们运行rabbit.eat,这会发生变化rabbit.full。full属性无处可寻,所以它应该上升到原型链(对象??),好吧,我不知道这里发生了什么。在此示例中full,rabbit创建并更改了属性,而在第一个示例中,它上升了原型链,因为它找不到属性。
我很困惑,也看不出为什么会这样。
慕侠2389804
相关分类