Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΡ€Π·ΠΈΠ½ΡƒΠŸΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚ΡŒ
Найти Π² Π”Π·Π΅Π½Π΅
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста

🧬 Как Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ наслСдованиС Π² JavaScript: 7 способов

Π˜ΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π³Π°ΠΉΠ΄ ΠΏΠΎ всСм ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ способам ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ наслСдования Π² JavaScript. Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈ слабыС стороны ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΈ научимся Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ для Ρ‚Π²ΠΎΠΈΡ… Π·Π°Π΄Π°Ρ‡. Π­Ρ‚ΠΎΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» взят ΠΈΠ· нашСй СТСнСдСльной email-рассылки, посвящСнной Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Ρƒ. ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π² числС ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΊΡ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ дайдТСст. πŸ“§ ΠŸΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ (function () { let link = document .getElementById ("5be0a698-dcde-4d42-bf2d-ec4d5cde4fe7-https://proglib.io/w/0ce559d5-2"); if (! link) return; let href = link .getAttribute ("href"); if (! href) return; let prefix = link .dataset .prefix; let action = link .dataset .action; link .addEventListener ("click", function (e) { let data = new FormData (); data .append ("url", href); apiFetch (action, { method: "POST",
ОглавлСниС

Π˜ΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π³Π°ΠΉΠ΄ ΠΏΠΎ всСм ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ способам ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ наслСдования Π² JavaScript. Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈ слабыС стороны ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΈ научимся Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ для Ρ‚Π²ΠΎΠΈΡ… Π·Π°Π΄Π°Ρ‡.

Π­Ρ‚ΠΎΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» взят ΠΈΠ· нашСй СТСнСдСльной email-рассылки, посвящСнной Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Ρƒ. ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π² числС ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΊΡ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ дайдТСст.

πŸ“§ ΠŸΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ

(function () { let link = document .getElementById ("5be0a698-dcde-4d42-bf2d-ec4d5cde4fe7-https://proglib.io/w/0ce559d5-2"); if (! link) return; let href = link .getAttribute ("href"); if (! href) return; let prefix = link .dataset .prefix; let action = link .dataset .action; link .addEventListener ("click", function (e) { let data = new FormData (); data .append ("url", href); apiFetch (action, { method: "POST", body: data }) .then (function (res) {}) .catch (function (err) { console .error (err); }); }) })();

Π’ JavaScript наслСдованиС ΠΈΠ³Ρ€Π°Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ использовании ΠΊΠΎΠ΄Π° ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ слоТными ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Благодаря ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ, JavaScript ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ нСсколько способов Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ наслСдования, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ своими прСимущСствами:

  • НаслСдованиС Ρ‡Π΅Ρ€Π΅Π· Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ².
  • НаслСдованиС Ρ‡Π΅Ρ€Π΅Π· конструктор.
  • ΠšΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ΅ наслСдованиС.
  • ΠŸΠ°Ρ€Π°Π·ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ наслСдованиС.
  • ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ½ΠΎΠ΅ наслСдованиС.
  • ΠŸΠ°Ρ€Π°Π·ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ΅ наслСдованиС.
  • НаслСдованиС Ρ‡Π΅Ρ€Π΅Π· классы ES6.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ эти Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ ΠΈ ΠΏΠΎΠΉΠΌΠ΅ΠΌ, Π² ΠΊΠ°ΠΊΠΈΡ… случаях ΠΈΡ… Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ.

   Β«Π”Ρ€ΡƒΠ³ Π²Ρ‹ΡƒΡ‡ΠΈΠ» COBOL ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ послСдниС измСнСния Π±Ρ‹Π»ΠΈ сдСланы Π² 90-х… Π΅Π³ΠΎ собствСнной ΠΌΠ°ΠΌΠΎΠΉΒ». Β«Π’ΠΎΠΎΠ±Ρ‰Π΅-Ρ‚ΠΎ наслСдованиС Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒΒ».
Β«Π”Ρ€ΡƒΠ³ Π²Ρ‹ΡƒΡ‡ΠΈΠ» COBOL ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ послСдниС измСнСния Π±Ρ‹Π»ΠΈ сдСланы Π² 90-х… Π΅Π³ΠΎ собствСнной ΠΌΠ°ΠΌΠΎΠΉΒ». Β«Π’ΠΎΠΎΠ±Ρ‰Π΅-Ρ‚ΠΎ наслСдованиС Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒΒ».

НаслСдованиС Ρ‡Π΅Ρ€Π΅Π· Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ²

Π­Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых простых ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² наслСдования Π² JavaScript – ΠΎΠ½ позволяСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ‡Π΅Ρ€Π΅Π· Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ, ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°ΠΌΠΈ:

-2

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹:

  • ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Animal создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ свойствами – species ΠΈ массивом habits.
  • ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Dog добавляСт спСцифичСскоС свойство – ΠΏΠΎΡ€ΠΎΠ΄Ρƒ (breed).
  • Dog.prototype = new Animal() прСдоставляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Dog доступ ΠΊ свойствам ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Animal Ρ‡Π΅Ρ€Π΅Π· Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ².

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°:

  • НС Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ слоТной Π»ΠΎΠ³ΠΈΠΊΠΈ для связи ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².
  • ΠŸΠΎΠ΄ΠΊΠ»Π°ΡΡΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ свойства, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ классС.

НСдостатки:

  • ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΎΠ±Ρ‰ΠΈΠΌΠΈ ссылочными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. Если измСняСтся массив ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, habits Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅), это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ отразится Π½Π° всСх экзСмплярах, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ссылку Π½Π° этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚:
  • ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ родитСля вызываСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ создании экзСмпляра подкласса new Dog() создаСтся Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ конструктора, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ссли ΠΎΠ½ выполняСт ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ.

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

β˜• Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ JavaScript: ООП Π½Π° простых ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…

НаслСдованиС Ρ‡Π΅Ρ€Π΅Π· конструктор

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ свойства родитСля, вызывая Π΅Π³ΠΎ конструктор Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ конструктора Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:

-3

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹:

  • Animal.call(this, 'Mammal'); ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ контСкст Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° this Π² конструктор Animal. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ свойства species ΠΈ activities, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² Animal, становятся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Dog.
  • ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Dog добавляСт Π½ΠΎΠ²ΠΎΠ΅ свойство breed, ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ экзСмпляра.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°:

  • Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ свойства для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ экзСмпляра. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ², массивы ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, activities) Π½Π΅ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ экзСмплярами, Ρ‡Ρ‚ΠΎ устраняСт ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты.
  • ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ. МоТно ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ значСния Π² конструктор родитСля Animal Ρ‡Π΅Ρ€Π΅Π· call, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, new Animal('Reptile') создаст экзСмпляр ΠΏΡ€Π΅ΡΠΌΡ‹ΠΊΠ°ΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ.

НСдостатки:

  • ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ конструктора Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ. НапримСр, Ссли Π² Animal Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ доступСн Π² Dog, ΠΈ это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ избыточности, Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½ΡƒΠΆΠ½ΠΎ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ наслСдникС.
  • ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² call создаСт Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ свойств ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ рСсурсозатратно.

ΠšΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ΅ наслСдованиС

ΠšΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ΅ (составноС) наслСдованиС ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² ΠΈ конструкторноС наслСдованиС, позволяя Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ классам ΠΈΠΌΠ΅Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ свойства ΠΈ доступ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ родитСля:

-4

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹:

  • ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π½ΠΎΠ΅ наслСдованиС Animal.call(this, 'Mammal') – свойства ΠΈΠ· конструктора Animal ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² экзСмпляры Dog. НапримСр, species ΠΈ activities становятся ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ экзСмпляра.
  • ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ½ΠΎΠ΅ наслСдованиС Dog.prototype = new Animal() – ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Animal.prototype (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, getSpecies) становятся доступными для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Dog.
  • ВосстановлСниС конструктора Dog.prototype.constructor = Dog – послС Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° ссылка Π½Π° конструктор Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ΡΡ. Π­Ρ‚Π° строка восстанавливаСт ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с instanceof ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ классов.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°:

  • ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ экзСмпляр ΠΈΠΌΠ΅Π΅Ρ‚ свои собствСнныС свойства, Ρ‡Ρ‚ΠΎ устраняСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΎΠ±Ρ‰ΠΈΡ… ссылочных Ρ‚ΠΈΠΏΠΎΠ².
  • Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² Animal.prototype, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, getSpecies.

НСдостатки:

  • Π”Π²Π°ΠΆΠ΄Ρ‹ вызываСтся конструктор родитСля.
  • ВрСбуСтся большС ΠΊΠΎΠ΄Π° ΠΈ восстановлСниС ссылки Π½Π° конструктор.

ΠŸΠ°Ρ€Π°Π·ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ наслСдованиС

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° основС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, Π΅Π³ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ наслСдованиС Π³ΠΈΠ±ΠΊΠΈΠΌ, Π½ΠΎ услоТняСт ΠΊΠΎΠ΄:

-5

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹:

  • ВмСсто прямого Π²Ρ‹Π·ΠΎΠ²Π° конструктора родитСля new Animal(), ΠΌΠ΅Ρ‚ΠΎΠ΄ Object.create создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, унаслСдованный ΠΎΡ‚ Animal.prototype. Π­Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ способ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Π° конструктора Animal Π½Π° этом этапС.
  • Π’Ρ‹Π·ΠΎΠ² Animal.call(this) Π² конструкторС Dog ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ свойства Animal (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, species ΠΈ habits) Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ экзСмпляр Dog.
  • ПослС установки Dog.prototype ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ собствСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ bark.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°:

  • ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π»Π΅Π³ΠΊΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ унаслСдованныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π±Π΅Π· измСнСния Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ конструктора.
  • ИспользованиС Object.create позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° конструктора родитСля ΠΏΡ€ΠΈ установкС ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ наслСдованиСм.

НСдостатки:

  • Π’ систСмах с Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ наслСдования Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΊΠΎΠ΄Π°.

ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ½ΠΎΠ΅ наслСдованиС

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Object.create для прямого создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠΌ, Π±Π΅Π· использования конструкторов:

-6

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹:

  • Object.create(obj) создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ obj. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ dog наслСдуСт свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° animal.
  • ΠœΠ΅Ρ‚ΠΎΠ΄ getTraits добавляСтся Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ dog, Ρ‡Ρ‚ΠΎ позволяСт Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ»ΠΎΠ½Π° Π±Π΅Π· измСнСния ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° animal.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°:

  • НС трСбуСтся созданиС конструкторов ΠΈΠ»ΠΈ слоТных наслСдствСнных структур.
  • ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для создания простых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², унаслСдованных ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

НСдостатки:

  • Если ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ содСрТит ссылочныС Ρ‚ΠΈΠΏΡ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, массивы ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹), измСнСния Π² Π½ΠΈΡ… Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΈΠ΄Π½Ρ‹ Π²ΠΎ всСх экзСмплярах, унаслСдованных ΠΎΡ‚ этого ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°.
  • Для создания ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… свойств Π½ΡƒΠΆΠ½ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈΡ… Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ экзСмпляр, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠ΅Π½Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для слоТных ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΉ.

ΠŸΠ°Ρ€Π°Π·ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ΅ наслСдованиС

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ являСтся ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΠΎΠΉ вСрсиСй ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ наслСдования – ΠΎΠ½ устраняСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° конструктора родитСля, копируя свойства с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Object.create:

-7

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹:

  • ВмСсто Π²Ρ‹Π·ΠΎΠ²Π° new Animal() для создания ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Object.create(Animal.prototype). Π­Ρ‚ΠΎ позволяСт ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ родитСля Π±Π΅Π· выполнСния Π΅Π³ΠΎ конструктора.
  • Π’Π½ΡƒΡ‚Ρ€ΠΈ конструктора Dog вызываСтся Animal.call(this), Ρ‡Ρ‚ΠΎ обСспСчиваСт ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… свойств (species, traits) Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ экзСмпляр.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°:

  • Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ конструктор вызываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· – Ρ‡Π΅Ρ€Π΅Π· Animal.call(this) Π² Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌ конструкторС. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с составным наслСдованиСм.
  • Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ свойства ΠΈ доступ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ, унаслСдованным ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° родитСля.
  • ИспользованиС Object.create ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ созданиС слоТных наслСдствСнных структур.

НСдостатки:

  • ВрСбуСтся большС ΠΊΠΎΠ΄Π° ΠΈ восстановлСниС ссылки Π½Π° конструктор.
  • Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Object.create ΠΈ Π²Ρ‹Π·ΠΎΠ² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ конструктора ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚ΡŒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΊΠΎΠ΄Π°.

πŸ‘¨β€πŸ’»πŸŽ¨ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π΅Ρ€Π°

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π΅Ρ€Π°Β»

НаслСдованиС Ρ‡Π΅Ρ€Π΅Π· классы ES6

Π‘ появлСниСм ES6 Π² JavaScript Π±Ρ‹Π» Π²Π²Π΅Π΄Π΅Π½ синтаксис классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅Π»Π°Π΅Ρ‚ процСсс наслСдования Π±ΠΎΠ»Π΅Π΅ понятным ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΡˆΠΈΡ… ΠΊ ООП:

-8

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹:

  • ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class опрСдСляСт Π½ΠΎΠ²Ρ‹ΠΉ класс. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ class Animal создаСт Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс с конструктором ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ.
  • Класс Dog наслСдуСт свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Animal, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово extends.
  • Π’ конструкторС Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ класса вызываСтся super, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ значСния Π² конструктор родитСля ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π»ΠΎΠ³ΠΈΠΊΡƒ. Π­Ρ‚ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ шаг ΠΏΠ΅Ρ€Π΅Π΄ использованиСм this Π² конструкторС Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ класса.
  • ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ getSpecies, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Animal.prototype ΠΈ автоматичСски доступны ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, созданным Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ классом Dog.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°:

  • Чистый ΠΈ понятный синтаксис, свойствСнный ООП.
  • ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова extends ΠΈ super ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ ΠΊΠΎΠ΄.

НСдостатки:

  • Для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ старых Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² ΠΊΠΎΠ΄ Π½Π° основС ES6 классов ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ использования Babel ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… транспайлСров.
  • ΠšΠ»Π°ΡΡΡ‹ ES6 слСгка ΡƒΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ прямым ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΈΠ·-Π·Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… абстракций.

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’Ρ‹Π±ΠΎΡ€ подходящСго ΠΌΠ΅Ρ‚ΠΎΠ΄Π° наслСдования Π² JavaScript зависит ΠΎΡ‚ потрСбностСй вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: хотя наслСдованиС Ρ‡Π΅Ρ€Π΅Π· классы ES6 быстро стало популярным благодаря своСй читаСмости ΠΈ удобству, ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ½ΠΎΠ΅ наслСдованиС всС Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ для ΠΌΠ½ΠΎΠ³ΠΈΡ… систСм.

Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ наслСдования Π²Ρ‹ Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π² своих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ? ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ своим ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ!

***

Π₯ΠΎΡ‡Π΅ΡˆΡŒ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ соврСмСнныС Π²Π΅Π±-интСрфСйсы ΠΈ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Ρƒ Π² IT? На курсС Frontend Basic Ρ‚Ρ‹ освоишь HTML, CSS, JavaScript ΠΈ React ΠΏΠΎΠ΄ руководством Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΠ· Π“Π°Π·ΠΏΡ€ΠΎΠΌΠ±Π°Π½ΠΊΠ° ΠΈ Аэрофлота, создашь 4 ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² ΠΏΠΎΡ€Ρ‚Ρ„ΠΎΠ»ΠΈΠΎ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡˆΡŒ Π½Π°Π²Ρ‹ΠΊΠΈ, вострСбованныС Π½Π° Ρ€Ρ‹Π½ΠΊΠ΅.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ, Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ

(function () { let link = document .getElementById ("5be0a698-dcde-4d42-bf2d-ec4d5cde4fe7-https://proglib.io/w/ba0f349a-79"); if (! link) return; let href = link .getAttribute ("href"); if (! href) return; let prefix = link .dataset .prefix; let action = link .dataset .action; link .addEventListener ("click", function (e) { let data = new FormData (); data .append ("url", href); apiFetch (action, { method: "POST", body: data }) .then (function (res) {}) .catch (function (err) { console .error (err); }); }) })();