JavaScript -objectconstructors
Voorbeeld
function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
Het wordt als een goede gewoonte beschouwd om constructorfuncties een hoofdletter te geven.
Objecttypen (blauwdrukken) (klassen)
De voorbeelden uit de voorgaande hoofdstukken zijn beperkt. Ze maken alleen afzonderlijke objecten.
Soms hebben we een " blauwdruk " nodig om veel objecten van hetzelfde "type" te maken.
De manier om een "objecttype" te maken, is door een objectconstructorfunctie te gebruiken .
In het bovenstaande voorbeeld function Person()
is een objectconstructorfunctie.
Objecten van hetzelfde type worden gemaakt door de constructorfunctie aan te roepen met het new
trefwoord:
const myFather = new Person("John", "Doe", 50, "blue");
const myMother = new Person("Sally", "Rally", 48, "green");
Het dit trefwoord
In JavaScript is het ding dat this
wordt genoemd het object dat de code "bezit".
De waarde van this
, wanneer gebruikt in een object, is het object zelf.
In een constructorfunctie this
heeft geen waarde. Het is een vervanging voor het nieuwe object. De waarde van this
wordt het nieuwe object wanneer een nieuw object wordt gemaakt.
Merk op dat this
dit geen variabele is. Het is een sleutelwoord. U kunt de waarde van niet wijzigen this
.
Een eigenschap aan een object toevoegen
Een nieuwe eigenschap toevoegen aan een bestaand object is eenvoudig:
Voorbeeld
myFather.nationality = "English";
De woning wordt toegevoegd aan myFather. Niet tegen mijn moeder. (Niet tegen enig ander persoon bezwaar).
Een methode aan een object toevoegen
Een nieuwe methode toevoegen aan een bestaand object is eenvoudig:
Voorbeeld
myFather.name = function () {
return this.firstName + " " + this.lastName;
};
De methode wordt toegevoegd aan myFather. Niet tegen mijn moeder. (Niet tegen enig ander persoon bezwaar).
Een eigenschap toevoegen aan een constructor
U kunt geen nieuwe eigenschap aan een objectconstructor toevoegen op dezelfde manier waarop u een nieuwe eigenschap aan een bestaand object toevoegt:
Voorbeeld
Person.nationality = "English";
Om een nieuwe eigenschap aan een constructor toe te voegen, moet je deze toevoegen aan de constructorfunctie:
Voorbeeld
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.nationality = "English";
}
Op deze manier kunnen objecteigenschappen standaardwaarden hebben.
Een methode toevoegen aan een constructor
Uw constructorfunctie kan ook methoden definiëren:
Voorbeeld
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.name = function() {
return this.firstName + " " + this.lastName;
};
}
U kunt geen nieuwe methode aan een objectconstructor toevoegen op dezelfde manier waarop u een nieuwe methode aan een bestaand object toevoegt.
Het toevoegen van methoden aan een objectconstructor moet binnen de constructorfunctie worden gedaan:
Voorbeeld
function Person(firstName, lastName, age, eyeColor) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.eyeColor = eyeColor;
this.changeName = function (name) {
this.lastName = name;
};
}
De functie changeName() wijst de waarde van name toe aan de eigenschap lastName van de persoon.
Nu kunt u proberen:
myMother.changeName("Doe");
JavaScript weet over welke persoon je het hebt door dit te "vervangen" door myMother .
Ingebouwde JavaScript-constructors
JavaScript heeft ingebouwde constructors voor native objecten:
new String() // A new String object
new Number() // A new Number object
new Boolean() // A new Boolean object
new Object() // A new Object object
new Array() // A new Array object
new RegExp() // A new RegExp object
new Function() // A new Function object
new Date() // A new Date object
Het Math()
object staat niet in de lijst. Math
is een globaal object. Het new
trefwoord kan niet worden gebruikt op
Math
.
Wist u?
Zoals u hierboven kunt zien, heeft JavaScript objectversies van de primitieve gegevenstypen String
, Number
, en Boolean
. Maar er is geen reden om complexe objecten te maken. Primitieve waarden zijn veel sneller:
Gebruik letterlijke tekenreeksen ""
in plaats van new String()
.
Gebruik letterlijke getallen 50
in plaats van new Number()
.
Gebruik booleaanse letterlijke waarden true / false
in plaats van new Boolean()
.
Gebruik letterlijke objecten {}
in plaats van new Object()
.
Gebruik array-letterwoorden []
in plaats van new Array()
.
Gebruik letterlijke patronen /()/
in plaats van new RegExp()
.
Gebruik functie-expressies () {}
in plaats van new Function()
.
Voorbeeld
let x1 = ""; // new primitive string
let x2 = 0; // new primitive number
let x3 = false; // new primitive boolean
const x4 = {}; // new Object object
const x5 = []; // new Array object
const x6 = /()/ // new RegExp object
const x7 = function(){}; // new function
String-objecten
Normaal gesproken worden strings gemaakt als primitieven: firstName = "John"
Maar strings kunnen ook als objecten worden gemaakt met het new
trefwoord:
firstName = new String("John")
Lees waarom strings niet als object moeten worden gemaakt in het hoofdstuk JS Strings .
Nummer objecten
Normaal gesproken worden getallen gemaakt als primitieven: x = 30
Maar getallen kunnen ook als objecten worden gemaakt met het new
trefwoord:
x = new
Number(30)
Lees waarom getallen niet als object moeten worden gemaakt in het hoofdstuk JS-nummers .
Booleaanse objecten
Normaal gesproken worden booleans gemaakt als primitieven: x =
false
Maar booleans kunnen ook als objecten worden gemaakt met het new
trefwoord:
x = new Boolean(false)
Leer waarom booleans niet als object moeten worden gemaakt in het hoofdstuk JS Booleans .