In realtà, ci sono diversi modi per creare oggetti in JavaScript. Quando si desidera solo creare un oggetto, non si ha alcun vantaggio nel creare oggetti " basati sul costruttore " utilizzando l' operatore " nuovo ". È come creare un oggetto usando la sintassi " letterale oggetto ". Ma gli oggetti " basati su costruttori " creati con un " nuovo " operatore sono incredibilmente utili quando si pensa alla " eredità prototipale ". Non è possibile mantenere la catena di ereditarietà con oggetti creati con sintassi letterale. Ma puoi creare una funzione di costruzione , associare proprietà e metodi al suo prototipo."operatore, restituirà un oggetto che avrà accesso a tutti i metodi e proprietà associati al prototipo di quella funzione di costruzione.
Ecco un esempio di creazione di un oggetto utilizzando la funzione di costruzione (vedere la spiegazione del codice in basso):
function Person(firstname, lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
Person.prototype.fullname = function() {
console.log(this.firstname + ' ' + this.lastname);
}
var zubaer = new Person('Zubaer', 'Ahammed');
var john = new Person('John', 'Doe');
zubaer.fullname();
john.fullname();
Ora puoi creare tutti gli oggetti che vuoi istanziando la funzione di costruzione Person e tutti erediteranno fullname () da esso.
Nota: la parola chiave " this " farà riferimento a un oggetto vuoto all'interno di una funzione di costruzione e ogni volta che si crea un nuovo oggetto da Person utilizzando l' operatore " new ", verrà automaticamente restituito un oggetto contenente tutte le proprietà e i metodi associati alla parola chiave " this " . E questi oggetti erediteranno sicuramente i metodi e le proprietà associati al prototipo della funzione di costruzione Person (che è il vantaggio principale di questo approccio).
A proposito, se si desidera ottenere la stessa funzionalità con la sintassi " letterale oggetto ", è necessario creare fullname () su tutti gli oggetti come di seguito:
var zubaer = {
firstname: 'Zubaer',
lastname: 'Ahammed',
fullname: function() {
console.log(this.firstname + ' ' + this.lastname);
}
};
var john= {
firstname: 'John',
lastname: 'Doe',
fullname: function() {
console.log(this.firstname + ' ' + this.lastname);
}
};
zubaer.fullname();
john.fullname();
Alla fine, se ora mi chiedi perché dovrei usare l' approccio della funzione di costruzione anziché l' oggetto letterale approccio :
*** L'eredità prototipale consente una semplice catena di eredità che può essere immensamente utile e potente.
*** Risparmia memoria ereditando metodi e proprietà comuni definiti nel prototipo delle funzioni di costruzione. Altrimenti, dovresti copiarli più e più volte in tutti gli oggetti.
Spero che abbia senso.
a = new Object
,a = new Object()
,a = {}
, letterale è molto più semplice e alcuni test mi sono imbattuto qualche tempo fa dire che è più veloce, i compilatori recenti possono aver causato la mia dichiarazione di essere falsa. Lo stesso vale per gli array letterali