JavaScript prototipēšana

JavaScript mantošanas tiesības prototipējot

Reālajā pasaulē kaut ko mantot nozīmē iegūt īpašumu, kas nosaka mūsu ieguvumus no iepriekšējām paaudzēm. Šajā rakstā jūs uzzināsiet, ka mantojums pastāv arī JavaScript un mantojuma modelis griežas ap kaut ko, ko sauc par prototipu. Jums var būt zināms arī prototipa jēdziens, ko bieži dēvē par oriģinālu modeli, no kura tiek izstrādātas citas formas. Programmā JavaScript prototips ir objekts, kurā var būt rekvizīti, ko var koplietot vairāki citi objekti. Un tas ir pamatā tam, kā mantošana darbojas JavaScript. Tāpēc dažreiz tiek teikts, ka JavaScript ievieš mantojuma modeļa prototipu.

Izpētīsim to tagad, izmantojot dažus koda piemērus, lai parādītu pārmantošanu un prototipa izveidi.

Piemērs:

var putns = {
    irSpārni: true,
    varlidot: true,
    irSpalvas: true,
}
Es izveidoju var putnu objektam, kuram ir trīs īpašības. Katra īpašība ir iestatīta uz patieso Boolean vērtību “true”.
Īpašībās iekļauju:
  • spārnus,
  • spēju lidot,
  • un spalvas.
Izmantojot viegli pieejamo objektu izveidi, es varu konstruēt jaunus objektus, kā tas redzams nākošajā koda papildinājumā:
var putns = {
  irSpārni: true,
  varlidot: true,
  irSpalvas: true,
};
var ērglis1 = Object.create(putns);
Piemēram, esmu iestatījis mainīgo ērglis1 uz izsaucēju, kas paņem putna objektu un nodod to objekta .create metodei. Tagad varu konsolē reģistrēt ērglis1 objekta saturu.


var putns = {
  irSpārni: true,
  varLidot: true,
  irSpalvas: true,
};
var ērglis1 = Object.create(putns);
console.log("ērglis1: ", ērglis1);
Palaižot kodu pamanīsim konsolē reģistrētu tukšu objektu. ” ērglis1 {} ” Tomēr, tā kā es izmantoju objektu, lai izveidotu, lai radītu ērglis1 objektu. Man arī ir pieejamas visas putnu objekta īpašības.
var putns = {
  irSpārni: true,
  varlidot: true,
  irSpalvas: true,
};
var ērglis1 = Object.create(putns);
console.log("ērglis1: ", ērglis1);


console.log("ērglis1 ir spārni:", ērglis1.irSpārni);
console.log("ērglis1 var lidot:", ērglis1.varlidot);
console.log("ērglis1 ir spalvas:", ērglis1.irSpalvas);
Tāpēc es varu izvadīt konsolē:
ērglis1:  {}
ērglis1 ir spārni: true
ērglis1 var lidot: true
ērglis1 ir spalvas: true

Lasīsim vēlreiz no koda, pamanīsim, ka ērglim1 ir patiesi (true) spārni, ērglis1 var lidot patiesi (true) un ērglim1 ir patiesas (true) spalvas.

Mūsu izvade konsolei ar objektu izveido sintaksi. Es varu uzbūvēt tik daudz objektu, cik vēlos, un tiem visiem kā prototips būs putnu objekti.
Lūk, tālāk redzams kodā, ka es uzbūvēju ērglis2 objektu un esmu izmantojis putnu objektu kā prototipu:
var putns = {
  irSpārni: true,
  varlidot: true,
  irSpalvas: true,
};
var ērglis1 = Object.create(putns);
console.log("ērglis1: ", ērglis1);


console.log("ērglis1 ir spārni:", ērglis1.irSpārni);
console.log("ērglis1 var lidot:", ērglis1.varlidot);
console.log("ērglis1 ir spalvas:", ērglis1.irSpalvas);


var ērglis2 = Object.create(bird);
Tāpēc, ka es uz tā palaidu objektu .create metodi un visu saglabāju mainīgajā ērglis2. Ir svarīgi saprast, ka ērglis2 objektam ir arī piekļuve īpašumam, kas saglabāts uz putna objekta kā tā prototipa.
Palaidīsim šo kodu, lai apstiprinātu un patiešām pamanītu, ka ērglis2 ir spārni: true tiek izvadīts uz konsoli.
Lai to paveiktu, kods jāpapildina ar console.log šādi:
var putns = {
  irSpārni: true,
  varlidot: true,
  irSpalvas: true,
};
var ērglis1 = Object.create(putns);
console.log("ērglis1: ", ērglis1);


console.log("ērglis1 ir spārni:", ērglis1.irSpārni);
console.log("ērglis1 var lidot:", ērglis1.varlidot);
console.log("ērglis1 ir spalvas:", ērglis1.irSpalvas);


var ērglis2 = Object.create(putns);
console.log("ērglis2 ir spārni:", ērglis2.irSpārni);

tad konsolē izvadītais rezultāts būs šāds:

ērglis1:  {}
ērglis1 ir spārni: true
ērglis1 var lidot: true
ērglis1 ir spalvas: true
ērglis2 ir spārni: true
Es pat varu pievienot dažādus objektus ar dažādu uzvedību. Piemēram, es varu pievienot pingvīns1 objektu. Es to daru, deklarējot pingvīns1 mainīgo un piešķirot tam objekta .create metodes rezultātu. Pingvīni ir nelidojoši putni, tāpēc es vēlos iestatīt var lidot īpašumu uz nepatiesu vērtību. Par laimi, tas ir salīdzinoši vienkāršs process, jo JavaScript sākas no paša objekta, meklējot rekvizītus, ar kuriem strādāt. Ja tas nevar to atrast objektā, tas meklē savu prototipu. Ir svarīgi atcerēties, ka tā nemeklē tālāk, ja tā atrod īpašumu tuvākajā objektā. Tas nodrošina vienkāršu mehānismu iedzimto īpašību ignorēšanai. Tāpēc īstenosim to tagad.
var putns = {
  irSpārni: true,
  varlidot: true,
  irSpalvas: true,
};
var ērglis1 = Object.create(putns);
console.log("ērglis1: ", ērglis1);


console.log("ērglis1 ir spārni:", ērglis1.irSpārni);
console.log("ērglis1 var lidot:", ērglis1.varlidot);
console.log("ērglis1 ir spalvas:", ērglis1.irSpalvas);


var ērglis2 = Object.create(putns);
console.log("ērglis2 ir spārni:", ērglis2.irSpārni);


var pingvīns1 = Object.create(putns);
pingvīns1.varlidot = false;
console.log("pingvīns1: ", pingvīns1);
Vispirms es iestatīju, ka var lidot īpašības pingvīns1 objektā uz false. Un tagad es varu konsolē izlogot rezultātu. Ņemiet vērā, ka pēc koda palaišanas konsolē tiek parādīts, ka pingvīns1 ir objekts, kura īpašība var lidot ir iestatīta uz false. Turklāt es joprojām varu piekļūt visām prototipa īpašībām. Tātad, piekļūstot tam, kuram ir spalvas un var lidot pingvins1 īpašības, tiks atgrieztas vērtības, kas tiek saglabātas prototipā, kad es palaižu kodu. Tomēr īpašība var lidot tagad ir iestatīta pašam objektam pingvīns1, tāpēc tā ignorē prototipa īpašību var lidot. Šī ignorēšana ietekmē tikai pingvīns1 objektu, tā nemaina manu prototipu vai citus ērgļa objektus.
konsolē izvadīts tas izskatās šādi:
ērglis1:  {}
ērglis1 ir spārni: true
ērglis1 var lidot: true
ērglis1 ir spalvas: true
ērglis2 ir spārni: true
pingvīns1:  { varlidot: false }
Šajā rakstā jūs uzzinājāt par mantošanu JavaScript, lai gan ir iespējams izveidot mantojumu, izmantojot objektu izveides metodi. Iespējams, labāk ir izmantot klases sintaksi sarežģītākiem objektiem un mantojumam. Lai gan zem pārsega šī sintakse joprojām darbojas ar prototipiem. Ir lietderīgi izmantot klases, jo tās uzlabo izstrādātāju pieredzi sarežģītākos scenārijos.

Loading

Noderīgs raksts? Dalies ar citiem: