Eenvoudige JavaScript-overerving wat u moet weten

Veel van mijn vrienden zijn C # - of C ++ - ontwikkelaars. Ze zijn gewend om overerving te gebruiken in hun projecten en wanneer ze JavaScript willen leren of ontdekken, is een van de eerste vragen die ze stellen: "Maar hoe kan ik overerving met JavaScript?"

JavaScript gebruikt een andere benadering dan C # of C ++ om een ​​objectgerichte taal te maken. Het is een prototype-gebaseerde taal. Het concept van prototyping houdt in dat gedrag kan worden hergebruikt door klonen bestaand objecten die als prototypen dienen. Elk object in JavaScript is afhankelijk van een prototype dat een set functies en leden definieert die door het object kunnen worden gebruikt. Er zijn geen class-just-objecten. Elk object kan vervolgens worden gebruikt als prototype voor een ander object.

Dit concept is uiterst flexibel en we kunnen het gebruiken om sommige concepten van OOP te simuleren, zoals overerving.

Overerving implementeren

Laten we eens kijken naar wat we met deze hiërarchie willen maken met JavaScript:

Allereerst kunnen we creëren Klasse A, eerste klasse gemakkelijk. Omdat er geen expliciete klassen zijn, kunnen we een reeks gedragingen definiëren (klasse A dus ...) door gewoon een functie als deze te maken:

var ClassA = function () this.name = "class A"; 

Deze "klasse" kan worden geïnstantieerd met behulp van de nieuwe trefwoord:

var a = new ClassA (); ClassA.prototype.print = function () console.log (this.name); 

En om het te gebruiken met behulp van ons object:

een print();

Redelijk eenvoudig, toch?

Het complete voorbeeld is slechts acht regels lang:

var ClassA = function () this.name = "class A";  ClassA.prototype.print = function () console.log (this.name);  var a = new ClassA (); een print();

Laten we nu een hulpmiddel toevoegen om 'overerving' tussen klassen te creëren. Deze tool hoeft maar één ding te doen: kloon het prototype.

var inheritsFrom = function (child, parent) child.prototype = Object.create (parent.prototype); ;

Dit is precies waar de magie gebeurt! Door het prototype te klonen, zetten we alle leden en functies over naar de nieuwe klas.

Dus als we een tweede klasse willen toevoegen die de eerste zal zijn, moeten we deze code gebruiken:

var ClassB = function () this.name = "class B"; this.samboom = "Ik ben het kind";  inheritsFrom (ClassB, ClassA);

Dan omdat ClassB geërfd van de afdrukken functie van Klasse A, eerste klasse, de volgende code werkt:

var b = nieuwe klasse B (); b.print ();

En produceert de volgende uitvoer:

klasse B

We kunnen zelfs de afdrukken functie voor ClassB:

ClassB.prototype.print = function () ClassA.prototype.print.call (this); console.log (this.surname); 

In dit geval ziet de geproduceerde uitvoer er als volgt uit:

klas B Ik ben het kind

De truc hier is om te bellen ClassA.prototype om de basis te krijgen afdrukken functie. Dan dankzij de telefoontje functie kunnen we de basisfunctie op het huidige object oproepen (deze).

Creëren ClassC is nu duidelijk:

var ClassC = function () this.name = "class C"; this.samboom = "Ik ben het kleinkind";  inheritsFrom (ClassC, ClassB); ClassC.prototype.foo = function () // Doe hier wat funky dingen ... ClassC.prototype.print = function () ClassB.prototype.print.call (this); console.log ("Klinkt alsof dit werkt!");  var c = nieuwe ClassC (); c.print ();

En de uitvoer is:

klas C Ik ben het kleinkind Klinkt alsof dit werkt!

Meer hands-on met JavaScript

Het zal je misschien een beetje verbazen, maar Microsoft heeft een heleboel gratis leren over veel open source JavaScript-onderwerpen en we zijn op een missie om nog veel meer met Microsoft Edge te maken. Bekijk mijn eigen:

  • Introductie tot WebGL 3D met HTML5 en Babylon.JS
  • Een enkele pagina-applicatie bouwen met ASP.NET en AngularJS
  • Cutting Edge Graphics in HTML

Of de leerserie van ons team:

  • Praktische prestatie-tips om uw HTML / JavaScript sneller te maken (een zevendelige serie van responsief ontwerp tot informele games tot prestatie-optimalisatie)
  • Het startschot voor het moderne webplatform (de fundamenten van HTML, CSS en JS)
  • Universele Windows-app ontwikkelen met HTML en JavaScript Jump Start (gebruik de JS die u al hebt gemaakt om een ​​app te bouwen)

En enkele gratis tools: Visual Studio Community, Azure Trial en cross-browser testtools voor Mac, Linux of Windows.

En een beetje filosofie ...

Tot slot wil ik alleen duidelijk stellen dat JavaScript niet C # of C ++ is. Het heeft zijn eigen filosofie. Als u een C ++ - of C # -ontwikkelaar bent en u echt de volledige kracht van JavaScript wilt omarmen, is de beste tip die ik u kan geven: probeer uw taal niet te repliceren in JavaScript. Er is geen beste of slechtste taal. Gewoon verschillende filosofieën!

Dit artikel maakt deel uit van de web dev tech-serie van Microsoft. We zijn verheugd om te delen Microsoft Edge en het nieuwe EdgeHTML-renderingengine met jou. Download gratis virtuele machines of test op afstand op uw Mac, iOS, Android of Windows-apparaat @ http://dev.modern.ie/.

Leer JavaScript: de complete gids

We hebben een complete handleiding samengesteld om u te helpen JavaScript te leren, of u net bent begonnen als een webontwikkelaar of dat u meer geavanceerde onderwerpen wilt verkennen.