Басня о наследовании в JavaScript (юмор)

от автора

Доброго времени суток, друзья!

Дисклеймер: дальнейшее повествование носит юмористический и немного познавательный характер. Все персонажи являются вымышленными, все совпадения случайны, за случайности не ручаюсь.

Наследование (биология) — передача генетической информации (генетических признаков) от одного поколения организмов к другому — Википедия

Наследование (программирование) — концепция объектно-ориентированного программирования, согласно которой абстрактный тип данных может наследовать данные и функциональность некоторого существующего типа, способствуя повторному использованию компонентов программного обеспечения — Википедия

Басня

В некотором царстве, в некотором государстве… короче, жили-были на свете три воробья: воробей-дед, воробей-отец и воробей-сын. Были они, значит, воробьями, каждый имел по две лапки и хвостику:

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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *