Costruttori di oggetti JavaScript
Esempio
function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
È considerata buona pratica nominare le funzioni di costruzione con una prima lettera maiuscola.
Tipi di oggetti (Progetti) (Classi)
Gli esempi dei capitoli precedenti sono limitati. Creano solo oggetti singoli.
A volte abbiamo bisogno di un " progetto " per creare molti oggetti dello stesso "tipo".
Il modo per creare un "tipo di oggetto" consiste nell'utilizzare una funzione di costruzione di oggetti .
Nell'esempio sopra, function Person()
c'è una funzione di costruzione di oggetti.
Gli oggetti dello stesso tipo vengono creati chiamando la funzione di costruzione con la new
parola chiave:
const myFather = new Person("John", "Doe", 50, "blue");
const myMother = new Person("Sally", "Rally", 48, "green");
La parola chiave questa
In JavaScript, la cosa chiamata this
è l'oggetto che "possiede" il codice.
Il valore di this
, quando utilizzato in un oggetto, è l'oggetto stesso.
In una funzione di costruzione this
non ha un valore. È un sostituto del nuovo oggetto. Il valore di this
diventerà il nuovo oggetto quando viene creato un nuovo oggetto.
Nota che this
non è una variabile. È una parola chiave. Non è possibile modificare il valore di this
.
Aggiunta di una proprietà a un oggetto
Aggiungere una nuova proprietà a un oggetto esistente è semplice:
Esempio
myFather.nationality = "English";
La proprietà verrà aggiunta a mio padre. Non a mia madre. (Non a qualsiasi altra persona oggetti).
Aggiunta di un metodo a un oggetto
Aggiungere un nuovo metodo a un oggetto esistente è semplice:
Esempio
myFather.name = function () {
return this.firstName + " " + this.lastName;
};
Il metodo verrà aggiunto a mio padre. Non a mia madre. (Non a qualsiasi altra persona oggetti).
Aggiunta di una proprietà a un costruttore
Non puoi aggiungere una nuova proprietà a un costruttore di oggetti nello stesso modo in cui aggiungi una nuova proprietà a un oggetto esistente:
Esempio
Person.nationality = "English";
Per aggiungere una nuova proprietà a un costruttore, devi aggiungerla alla funzione di costruzione:
Esempio
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.nationality = "English";
}
In questo modo le proprietà dell'oggetto possono avere valori predefiniti.
Aggiunta di un metodo a un costruttore
La tua funzione di costruzione può anche definire metodi:
Esempio
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;
};
}
Non puoi aggiungere un nuovo metodo a un costruttore di oggetti nello stesso modo in cui aggiungi un nuovo metodo a un oggetto esistente.
L'aggiunta di metodi a un costruttore di oggetti deve essere eseguita all'interno della funzione di costruzione:
Esempio
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;
};
}
La funzione changeName() assegna il valore di name alla proprietà lastName della persona.
Ora puoi provare:
myMother.changeName("Doe");
JavaScript sa di quale persona stai parlando "sostituendo" questo con myMother .
Costruttori JavaScript integrati
JavaScript ha costruttori integrati per oggetti nativi:
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
L' Math()
oggetto non è nell'elenco. Math
è un oggetto globale. La new
parola chiave non può essere utilizzata su
Math
.
Lo sapevate?
Come puoi vedere sopra, JavaScript ha versioni oggetto dei tipi di dati primitivi String
, Number
e Boolean
. Ma non c'è motivo di creare oggetti complessi. I valori primitivi sono molto più veloci:
Usa stringhe letterali ""
invece di new String()
.
Usa numeri letterali 50
invece di new Number()
.
Usa letterali booleani true / false
invece di new Boolean()
.
Usa valori letterali oggetto {}
invece di new Object()
.
Usa valori letterali array []
invece di new Array()
.
Usa i valori letterali del modello /()/
invece di new RegExp()
.
Usa le espressioni di funzione () {}
invece di new Function()
.
Esempio
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
Oggetti stringa
Normalmente, le stringhe vengono create come primitive: firstName = "John"
Ma le stringhe possono anche essere create come oggetti usando la new
parola chiave:
firstName = new String("John")
Scopri perché le stringhe non dovrebbero essere create come oggetti nel capitolo JS Strings .
Numero di oggetti
Normalmente, i numeri vengono creati come primitive: x = 30
Ma i numeri possono anche essere creati come oggetti usando la new
parola chiave:
x = new
Number(30)
Scopri perché i numeri non dovrebbero essere creati come oggetti nel capitolo Numeri JS .
Oggetti booleani
Normalmente, i booleani vengono creati come primitivi: x =
false
Ma i booleani possono anche essere creati come oggetti usando la new
parola chiave:
x = new Boolean(false)
Scopri perché i booleani non dovrebbero essere creati come oggetti nel capitolo JS Booleans .