Mange av vennene mine er C # eller C ++ utviklere. De er vant til å bruke arv i sine prosjekter, og når de vil lære eller oppdage JavaScript, er et av de første spørsmålene de spør: "Men hvordan kan jeg gjøre arv med JavaScript?"
Faktisk bruker JavaScript en annen tilnærming enn C # eller C ++ for å lage et objektorientert språk. Det er en prototype-basert Språk. Konseptet med prototyping innebærer at atferd kan gjenbrukes ved kloning eksisterende objekter som fungerer som prototyper. Hvert objekt i JavaScript avhenger av en prototype som definerer et sett med funksjoner og medlemmer som objektet kan bruke. Det er ingen klasse-bare objekter. Hvert objekt kan da brukes som prototype for et annet objekt.
Dette konseptet er ekstremt fleksibelt, og vi kan bruke det til å simulere noen begreper fra OOP, som arv.
La oss se på hva vi vil lage med dette hierarkiet ved hjelp av JavaScript:
Først av alt, kan vi lage Classa
Enkelt. Fordi det ikke er noen eksplisitte klasser, kan vi definere et sett med oppførsel (En klasse så ...) ved å bare opprette en funksjon som denne:
var ClassA = funksjon () this.name = "klasse A";
Denne "klassen" kan bli instantiated ved hjelp av ny
søkeord:
var a = ny klasse a (); ClassA.prototype.print = function () console.log (this.name);
Og å bruke den ved hjelp av vårt objekt:
a.print ();
Ganske enkelt, rett?
Den komplette prøven er bare åtte linjer lang:
var ClassA = funksjon () this.name = "klasse A"; ClassA.prototype.print = function () console.log (this.name); var a = ny klasseA (); a.print ();
La oss nå legge til et verktøy for å lage "arv" mellom klassene. Dette verktøyet må bare gjøre en ting: klon prototypen.
var arvFrom = funksjon (barn, foreldre) child.prototype = Object.create (parent.prototype); ;
Dette er akkurat der magien skjer! Ved å klone prototypen overfører vi alle medlemmer og funksjoner til den nye klassen.
Så hvis vi ønsker å legge til en andre klasse som blir barn av den første, må vi bare bruke denne koden:
var ClassB = funksjon () this.name = "klasse B"; this.surname = "Jeg er barnet"; arveFrom (klasse B, klasseA);
Så fordi ClassB
arvet skrive ut
funksjon fra Classa
, følgende kode virker:
var b = ny klasse b (); b.print ();
Og produserer følgende utgang:
klasse B
Vi kan til og med tilsidesette skrive ut
funksjon for ClassB
:
ClassB.prototype.print = function () ClassA.prototype.print.call (dette); console.log (this.surname);
I dette tilfellet vil den produserte produksjonen se slik ut:
klasse B Jeg er barnet
Trikset her er å ringe ClassA.prototype
å få basen skrive ut
funksjon. Så takk til anrop
funksjon vi kan ringe basefunksjonen på det nåværende objektet (dette
).
Opprette ClassC
er nå åpenbart:
var ClassC = funksjon () this.name = "klasse C"; this.surname = "Jeg er barnebarnet"; arverFrom (Klasse C, Klasse B); ClassC.prototype.foo = function () // Gjør noen funky ting her ... ClassC.prototype.print = function () ClassB.prototype.print.call (this); console.log ("Høres ut som dette fungerer!"); var c = ny ClassC (); c.print ();
Og utgangen er:
klasse C Jeg er barnebarnet Høres ut som dette fungerer!
Det kan kanskje overraske deg litt, men Microsoft har en mengde gratis læring på mange open source JavaScript-emner, og vi har et oppdrag å skape mye mer med Microsoft Edge. Sjekk ut min egen:
Eller vårt lags læringsserie:
Og noen gratis verktøy: Visual Studio Community, Azure Trial, og tverrbrowser testing verktøy for Mac, Linux eller Windows.
For å konkludere, vil jeg bare klart si at JavaScript ikke er C # eller C ++. Den har sin egen filosofi. Hvis du er en C ++ eller C # -utvikler, og du virkelig ønsker å omfavne full kraft av JavaScript, er det beste tipset jeg kan gi deg: Ikke prøv å replikere språket ditt til JavaScript. Det er ingen beste eller verste språk. Bare forskjellige filosofier!
Denne artikkelen er en del av web dev-teknologiserien fra Microsoft. Vi er glade for å dele Microsoft Edge og den nye EdgeHTML rendering motor med deg. Få gratis virtuelle maskiner eller test eksternt på Mac, IOS, Android eller Windows-enheten @ http://dev.modern.ie/.
Lær JavaScript: Den komplette veiledningen
Vi har bygget en komplett guide for å hjelpe deg med å lære JavaScript, enten du er bare i gang som webutvikler eller du vil utforske mer avanserte emner.