Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2021 March 31

АМ

Андрей Москаленко... in NodeUA - JavaScript and Node.js in Ukraine
Мне кажется проблема этого кода в том, что это чисто абстрактные классы в вакууме = т.е какие-то искусственные классы, которые непонятно зачем могут пригодиться.
источник

АМ

Андрей Москаленко... in NodeUA - JavaScript and Node.js in Ukraine
и странно что в Rabbit конструктора нет, вроде должен быть
источник

A

Andrey in NodeUA - JavaScript and Node.js in Ukraine
Понял
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
Андрей Москаленко
и странно что в Rabbit конструктора нет, вроде должен быть
Он же унаследуется от animal
источник

AL

Andrey Listochkin in NodeUA - JavaScript and Node.js in Ukraine
Zhenia
Ребята посоветуйте какую то книгу по Js толковую, а то бывает интернет заканчивается и все
Я на той неделе советовал Eloquent JavaScript
источник

AL

Andrey Listochkin in NodeUA - JavaScript and Node.js in Ukraine
Переслано от Andrey Listochkin
Ее написал Мартин Хавербеке, автор CodeMirror - текстового редактора, на основе которого работают девтулы во всех современных браузерах и еще много где. Лет 10 назад книжка просто взорвала JS-мир и стала книгой по умолчанию для изучения языка.

Потом какое-то время она не обновлялась, и маленько потеряла. Но в 2018м вышло третье издание, и она снова топ.
источник

АМ

Андрей Москаленко... in NodeUA - JavaScript and Node.js in Ukraine
действительно конструктор наследуется, на других языках писал, там такого нигде кажется не было, чтоб конструкторы наследовались
источник

wo

went out in NodeUA - JavaScript and Node.js in Ukraine
Почему наследуется?
У Rabbit есть свойство .prototype где лежит неперечислимый конструктор дефолтный.

Посмотрите на:
Object.getOwnPropertyDescriptor(Rabbit.prototype, 'constructor')
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
went out
Почему наследуется?
У Rabbit есть свойство .prototype где лежит неперечислимый конструктор дефолтный.

Посмотрите на:
Object.getOwnPropertyDescriptor(Rabbit.prototype, 'constructor')
Потому что наследуется, проверьте сами :)
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
Вызовется конструктор animal
источник

DS

Dmitry Semigradsky in NodeUA - JavaScript and Node.js in Ukraine
Конструктор потомка вызывает конструктор родителя. Разве не везде так?
источник

wo

went out in NodeUA - JavaScript and Node.js in Ukraine
Illya Klymov
Потому что наследуется, проверьте сами :)
Видимо терминологическая путаница.
Конструктор Animal вызывается после вызова дефолтного конструктора Rabbit.
То есть цепочка вызова такая
new Rabbit → constructor → super()

То есть, наличие конструктора у Rabbit оно не отменяет.
Моё высказывание относилось исключительно к тому, что у Rabbit есть поле constructor, хотя оно и берётся дефолтным.
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
Мне кажется вы путаете
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
Пардон, разверну мысль чуть позже, с телефона ад за рулём
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
Кратко - поле constructor перезаписываемо
источник

wo

went out in NodeUA - JavaScript and Node.js in Ukraine
Мы скорее всего об одном и том же, просто с разных сторон рассматриваем слово Наследование.

Да, поле
constructor
перезаписываемо, просто — это не противоречие, а дополнение.

И именно поэтому у него есть определение — возвращаемый дескриптор свойства: Rabbit.prototype.constructor
Т.е. это именно его мы спрашиваем тут:

Object.getOwnPropertyDescriptor(Rabbit.prototype, 'constructor')

и возвращается с остальными дополнениями в целом :
{
 configurable: true
 enumerable: false
 writable: true
 value ...
}

Ведь в противном случае вернулся бы
undefined
!

То есть именно свойство .constructor есть и у Rabbit.prorotype и у class Rabbit, несмотря на то, что его явно не определяли )
Т.к. иначе Animal не отнаследуется! Так работает extend, что это свойство необходимо в наличии.

Ведь в случае классового наследования прототипом свойства .constructor у Rabbit должно являться свойство конструктора от Animal. Именно это позволяет ключевому слову
super()
вообще работать.

———

То есть сами конструкторы у Rabbit и Animal — Разные.
Всего лишь это хотел сказать, что это не один и тот же метод.

И они наследуются, да: прототипом конструктора Rabbit является конструктор Animal, вот:

Object.getPrototypeOf(Rabbit)  === Animal // true
...

Но

Rabbit.prototype.constructor === Animal.prototype.constructor // false

То есть, конструкторы наследуются по цепочке прототипов, но поле .constructor у Rabbit своё собственное, а не достаётся из Animal.
источник

NK

ID:0 in NodeUA - JavaScript and Node.js in Ukraine
источник

DD

Dmytro Drachov in NodeUA - JavaScript and Node.js in Ukraine
Zhenia
Ребята посоветуйте какую то книгу по Js толковую, а то бывает интернет заканчивается и все
А Девид Фланаган нынче не в моде? Я лично начинал в него
источник

M

Mehannoying in NodeUA - JavaScript and Node.js in Ukraine
Dmytro Drachov
А Девид Фланаган нынче не в моде? Я лично начинал в него
Если только вы хотите себе справочник по mdn в книжном формате)
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
вообще не одно и то же
источник