АМ
Size: a a a
АМ
АМ
IK
AL
AL
АМ
wo
.prototype где лежит неперечислимый конструктор дефолтный.Object.getOwnPropertyDescriptor(Rabbit.prototype, 'constructor')
IK
.prototype где лежит неперечислимый конструктор дефолтный.Object.getOwnPropertyDescriptor(Rabbit.prototype, 'constructor')
IK
DS
wo
new Rabbit → constructor → super()
То есть, наличие конструктора у Rabbit оно не отменяет. IK
IK
IK
wo
constructorперезаписываемо, просто — это не противоречие, а дополнение.
Rabbit.prototype.constructor
Т.е. это именно его мы спрашиваем тут:Object.getOwnPropertyDescriptor(Rabbit.prototype, 'constructor')и возвращается с остальными дополнениями в целом :
{
  configurable: true
  enumerable: false
  writable: true
  value ...
}
Ведь в противном случае вернулся бы undefined!
.constructor есть и у Rabbit.prorotype и у class Rabbit, несмотря на то, что его явно не определяли )extend, что это свойство необходимо в наличии..constructor у Rabbit должно являться свойство конструктора от Animal. Именно это позволяет ключевому слову super()вообще работать.
Object.getPrototypeOf(Rabbit) === Animal // true...
Rabbit.prototype.constructor === Animal.prototype.constructor // falseТо есть, конструкторы наследуются по цепочке прототипов, но поле
.constructor у Rabbit своё собственное, а не достаётся из Animal.NK
DD
M
ES