JavaScript -objekkonstrukteurs
Voorbeeld
function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
Dit word as goeie praktyk beskou om konstruktorfunksies met 'n hoofletter eerste letter te noem.
Voorwerptipes (Blueprints) (Klasse)
Die voorbeelde uit die vorige hoofstukke is beperk. Hulle skep slegs enkele voorwerpe.
Soms het ons 'n " bloudruk " nodig om baie voorwerpe van dieselfde "tipe" te skep.
Die manier om 'n "voorwerptipe" te skep, is om 'n objekkonstruktorfunksie te gebruik .
In die voorbeeld hierbo function Person()
is 'n objekkonstruktorfunksie.
Voorwerpe van dieselfde tipe word geskep deur die konstruktorfunksie met die new
sleutelwoord:
const myFather = new Person("John", "Doe", 50, "blue");
const myMother = new Person("Sally", "Rally", 48, "green");
Die hierdie sleutelwoord
In JavaScript is die ding wat genoem this
word die voorwerp wat die kode "besit".
Die waarde van this
, wanneer dit in 'n voorwerp gebruik word, is die voorwerp self.
In 'n konstruktor het funksie this
nie 'n waarde nie. Dit is 'n plaasvervanger vir die nuwe voorwerp. Die waarde van this
sal die nuwe voorwerp word wanneer 'n nuwe voorwerp geskep word.
Let daarop dat this
dit nie 'n veranderlike is nie. Dit is 'n sleutelwoord. Jy kan nie die waarde van verander nie this
.
Voeg 'n eiendom by 'n voorwerp
Dit is maklik om 'n nuwe eiendom by 'n bestaande voorwerp te voeg:
Voorbeeld
myFather.nationality = "English";
Die eiendom sal by myFather gevoeg word. Nie vir myMoeder nie. (Nie teen enige ander persoon beswaar nie).
Voeg 'n metode by 'n objek
Dit is maklik om 'n nuwe metode by 'n bestaande voorwerp te voeg:
Voorbeeld
myFather.name = function () {
return this.firstName + " " + this.lastName;
};
Die metode sal by myFather gevoeg word. Nie vir myMoeder nie. (Nie teen enige ander persoon beswaar nie).
Voeg 'n eiendom by 'n konstruktor
Jy kan nie 'n nuwe eienskap by 'n objekkonstruktor voeg op dieselfde manier as wat jy 'n nuwe eienskap by 'n bestaande voorwerp voeg nie:
Voorbeeld
Person.nationality = "English";
Om 'n nuwe eienskap by 'n konstruktor te voeg, moet jy dit by die konstruktorfunksie voeg:
Voorbeeld
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.nationality = "English";
}
Op hierdie manier kan voorwerpeienskappe verstekwaardes hê.
Voeg 'n metode by 'n konstruktor
Jou konstruktorfunksie kan ook metodes definieer:
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;
};
}
Jy kan nie 'n nuwe metode by 'n objekkonstruktor voeg op dieselfde manier as wat jy 'n nuwe metode by 'n bestaande voorwerp voeg nie.
Die byvoeging van metodes by 'n objekkonstruktor moet binne die konstruktorfunksie gedoen word:
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;
};
}
Die changeName()-funksie ken die waarde van naam toe aan die persoon se lastName-eienskap.
Nou kan jy probeer:
myMother.changeName("Doe");
JavaScript weet van watter persoon jy praat deur dit met myMother te "vervang" .
Ingeboude JavaScript-konstrukteurs
JavaScript het ingeboude konstruktors vir inheemse voorwerpe:
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
Die Math()
voorwerp is nie in die lys nie. Math
is 'n globale voorwerp. Die new
sleutelwoord kan nie gebruik word op
Math
.
Het jy geweet?
Soos u hierbo kan sien, het JavaScript objekweergawes van die primitiewe datatipes String
, Number
en Boolean
. Maar daar is geen rede om komplekse voorwerpe te skep nie. Primitiewe waardes is baie vinniger:
Gebruik string letterlikes ""
in plaas van new String()
.
Gebruik getalleletters 50
in plaas van new Number()
.
Gebruik Boolese letters true / false
in plaas van new Boolean()
.
Gebruik letterlike voorwerpe {}
in plaas van new Object()
.
Gebruik skikking letterlike []
in plaas van new Array()
.
Gebruik letterlike patroon /()/
in plaas van new RegExp()
.
Gebruik funksie-uitdrukkings () {}
in plaas 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
Stringvoorwerpe
Normaalweg word snare as primitiewe geskep:firstName = "John"
Maar stringe kan ook as voorwerpe geskep word deur die new
sleutelwoord:
firstName = new String("John")
Leer hoekom stringe nie as voorwerp geskep moet word nie in die hoofstuk JS Strings .
Getal voorwerpe
Gewoonlik word getalle as primitiewe geskep:x = 30
Maar getalle kan ook as voorwerpe geskep word deur die new
sleutelwoord:
x = new
Number(30)
Leer hoekom getalle nie as voorwerp geskep moet word nie in die hoofstuk JS Nommers .
Boole-voorwerpe
Normaalweg word booleans as primitiewe geskep:x =
false
Maar booleans kan ook as voorwerpe geskep word deur die new
sleutelwoord:
x = new Boolean(false)
Leer hoekom booleans nie as objek geskep moet word nie in die hoofstuk JS Booleans .