【发布时间】:2020-07-16 11:15:04
【问题描述】:
案例 1 :- 最初在对象文字中,我将 __proto__ 分配给 null,然后我尝试将其重新分配给 animal,但这是行不通的。
'use strict'
let animal = {
eats: true,
walk(){
console.log('Animal Walk');
}
}
let rabbit = {
jumps: true,
__proto__: null
}
rabbit.__proto__ = animal
console.log(Object.getPrototypeOf(rabbit))
rabbit.walk()
案例 2:- 现在我在对象字面量中将 __proto__ 分配为 animal,然后我尝试将其重新分配给 null,在这种情况下它会将 __proto__ 更改为 null。
'use strict'
let animal = {
eats: true,
walk(){
console.log('Animal Walk');
}
}
let rabbit = {
jumps: true,
__proto__: animal
}
rabbit.__proto__ = null
console.log(Object.getPrototypeOf(rabbit))
rabbit.walk()
案例 3:- 当我使用 Object.setPrototypeOf() 时,它工作正常
'use strict'
let animal = {
eats: true,
walk(){
console.log('Animal Walk');
}
}
let rabbit = {
jumps: true,
__proto__: null
}
Object.setPrototypeOf(rabbit, animal)
console.log(Object.getPrototypeOf(rabbit))
rabbit.walk()
为什么分配在第一种情况下不起作用?
【问题讨论】:
-
不应该是动物.__proto__ 而不仅仅是动物吗?
-
@TheoWckr naah,我删除
rabbit.__proto__ = null行确实可以正常工作。我需要将原型设置为animal而不是animal's prototype -
@TheoWckr - 如果 Code Maniac 想要
animal,而不是它的原型,则不是rabbit的原型,他们似乎是这样的(因为animal有walk,但它的原型没有't)。
标签: javascript object prototype