Доброго времени суток, друзья!
Дисклеймер: дальнейшее повествование носит юмористический и немного познавательный характер. Все персонажи являются вымышленными, все совпадения случайны, за случайности не ручаюсь.
Наследование (биология) — передача генетической информации (генетических признаков) от одного поколения организмов к другому — Википедия
Наследование (программирование) — концепция объектно-ориентированного программирования, согласно которой абстрактный тип данных может наследовать данные и функциональность некоторого существующего типа, способствуя повторному использованию компонентов программного обеспечения — Википедия
Басня
В некотором царстве, в некотором государстве… короче, жили-были на свете три воробья: воробей-дед, воробей-отец и воробей-сын. Были они, значит, воробьями, каждый имел по две лапки и хвостику:
let SparrowGrandfather = function() {} SparrowGrandfather.prototype = { species: 'Sparrow', paws: 2, tail: true } let SparrowFather = function() {} SparrowFather.prototype = Object.create(SparrowGrandfather.prototype) let SparrowSon = function() {} SparrowSon.prototype = Object.create(SparrowFather.prototype) let grandfather = new SparrowGrandfather() let father = new SparrowFather() let son = new SparrowSon() console.log(grandfather.species, father.species, son.species) // Sparrow Sparrow Sparrow console.log(grandfather.paws, father.paws, son.paws) // 2 2 2 console.log(grandfather.tail, father.tail, son.tail) // true true true
Вдруг, ни с того ни с сего воробей-дед решил отрастить себе третью лапку. Не спрашивайте зачем, он и сам толком не понимал. Вероятно, просто выжил из ума на старости лет. И хотите — верьте, хотите — нет, ему это удалось. Но вот незадача: третья лапка выросла не только у него, но также у воробья-отца и воробья-сына.
SparrowGrandfather.prototype.paws++ console.log(grandfather.paws, father.paws, son.paws) // 3 3 3
Вслед за полоумным воробьем-дедом и воробей-отец, всю свою жизнь страстно завидовавший большим хищным птицам, их высокому полету и царственному величию, решил стать орлом. Решил и стал. Опять же не спрашивайте, как ему это удалось. Это басня, в конце концов, а не жизнь: в басне все возможно. И все бы ничего, но в орла также обратился и воробей-сын. Но не воробей-дед, тот так и остался трехлапым воробьем. Однако поскольку он находился в кругосветном путешествии, ни орел-отец, ни орел-сын об этом не знали.
SparrowFather.prototype.species = 'Eagle' console.log(grandfather.species, father.species, son.species) // Sparrow Eagle Eagle
И поселилась в сердце орла-сына злоба лютая. И решил он воробью-деду и орлу-отцу отомстить за все обиды и унижения. Думал, думал, как бы ему это получше провернуть и, наконец, придумал: «А откушу-ка я себе хвост по самое не хочу». Взял и откусил. Глядь на орла-отца, а у того хвост на месте. К этому времени и воробей-дед подоспел, и тоже с хвостом. Увидел воробей-дед бесхвостого орла-сына и чуть не отбросил… третью лапку. Вот такая интересная штука — наследование в JS.
SparrowSon.prototype.tail = false console.log(grandfather.tail, father.tail, son.tail) // true true false
Мораль сей басни такова: несмотря на то, что наследование в JS противоречит законам природы, оно позволяет нам динамически менять свойства и методы потомков через их общего предка (или, если угодно, свойства и методы представителей класса через класс), производить, так сказать, тихую модификацию… и это круто!
Благодарю за внимание. Хорошего дня!
ссылка на оригинал статьи https://habr.com/ru/post/484970/
Добавить комментарий