Homepage » Coding » JavaScript orientato agli oggetti (OOJS) 3 modi per creare istanze di oggetti

    JavaScript orientato agli oggetti (OOJS) 3 modi per creare istanze di oggetti

    Quando è un linguaggio di programmazione tutto sugli oggetti, la prima cosa che dobbiamo imparare è come creare oggetti. Creare oggetti in JavaScript è abbastanza facile: un paio di parentesi graffe farà il lavoro, tuttavia, questo è né l'unico modo per creare un oggetto né l'unico modo avrai sempre bisogno di usare.

    In JavaScript, le istanze dell'oggetto sono creato da oggetti built-in e venire all'esistenza quando il programma è in esecuzione. Per esempio, Data è un oggetto incorporato che ci fornisce informazioni sulle date. Se vogliamo mostrare la data corrente su una pagina, noi bisogno di un'istanza di runtime di Data che porta le informazioni sulla data corrente.

    JavaScript ci consente anche di definire i nostri oggetti che può produrre le proprie istanze di oggetti in runtime. In JavaScript, tutto è un oggetto e ogni oggetto ha un ultimo antenato chiamato Oggetto. Viene chiamata la creazione di un'istanza di oggetto instantiation.

    1. Il nuovo operatore

    Uno dei metodi più comuni e conosciuti per creare una nuova istanza di un oggetto è di usando il nuovo operatore.

    Avete bisogno di un costruttore fare il nuovo lavoro dell'operatore. Un costruttore è un metodo di un oggetto che mette insieme a nuova istanza di quell'oggetto. La sintassi di base è la seguente:

     nuovo costruttore () 

    Un costruttore può accettare argomenti che può essere usato per cambiare o aggiungere proprietà all'istanza dell'oggetto che costruisce. Il costruttore ha lo stesso nome come l'oggetto a cui appartiene.

    Ecco un esempio su come creare un istanza del Data() oggetto con il nuovo parola chiave:

     dt = new Date (2017, 0, 1) console.log (dt) // dom 01 gen 2017 00:00:00 GMT + 0100 

    Data() è il costruttore per creare un nuovo Data oggetto. Diversi costruttori per un oggetto prendere argomenti diversi per creare lo stesso tipo di istanze di oggetto con attributi vari.

    Non tutti gli oggetti incorporati in JavaScript possono essere istanziati come Data. Ci sono oggetti che non venire con un costruttore: Matematica, JSON e Riflettere, ma sono ancora oggetti ordinari.

    Tra gli oggetti built-in che hanno constructor (s), Simbolo non può essere chiamato nello stile del costruttore per istanziare un nuovo Simbolo esempio. Può essere solo chiamato come una funzione che restituisce un nuovo Simbolo valore.

    Inoltre, tra gli oggetti built-in che hanno il / i costruttore / i, non tutti hanno bisogno che i loro costruttori vengano chiamati con il nuovo operatore per essere istanziato. Funzione, schieramento, Errore, e RegExp può anche essere chiamato come funzioni, senza usare il nuovo parola chiave e istanziano e restituiscono una nuova istanza di oggetto.

    2. Il Riflettere oggetto

    I programmatori di backend potrebbero già avere familiarità con API di Reflection. La riflessione è una caratteristica dei linguaggi di programmazione ispezionare e aggiornare alcune delle entità di base, come oggetti e classi, in fase di esecuzione.

    In JavaScript, potresti già eseguire alcuni operazioni di riflessione usando Oggetto. Ma, a corretta API di Reflection alla fine venne ad esistere anche in JavaScript.

    Il Riflettere oggetto ha un insieme di metodi per creare e aggiornare istanze di oggetti. Il Riflettere oggetto non ha un costruttore, quindi non può essere istanziato con il nuovo operatore, e, proprio come Matematica e JSON, esso non può essere chiamato come una funzione o.

    però, Riflettere ha un equivalente del nuovo operatore: il Reflect.construct () metodo.

     Reflect.construct (target, argumentsList [, newTarget]) 

    Entrambi i bersaglio e l'opzionale NewTarget gli argomenti sono oggetti con i propri costruttori, mentre argumentsList è un lista di argomenti da passare al costruttore di bersaglio.

     var dt = Reflect.construct (Date, [2017, 0, 1]); console.log (dt); // dom 01 gen 2017 00:00:00 GMT + 0100 

    Il codice sopra ha lo stesso effetto come istanziare Data() usando il nuovo operatore. Anche se puoi ancora usarlo nuovo, La riflessione è un ECMAScript 6 standard. Ti permette anche di fare uso del NewTarget discussione, che è un altro vantaggio rispetto al nuovo operatore.

    Il valore di NewTargetIl prototipo di (per essere precisi, è il prototipo di NewTarget's costruttore) diventa il prototipo dell'istanza appena creata.

    Un prototipo è il proprietà di un oggetto, il cui valore è anche un oggetto, portando le proprietà dell'oggetto originale. In breve, un oggetto ottiene i suoi membri dal suo prototipo.

    Ecco, vediamo un esempio:

     class A constructor () this.message = function () console.log ('message from A') class B constructor ()  message () console.log ('messaggio da B')  data () console.log ('data from B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // messaggio da A console.log (obj.data ()); // dati da B console.log (obj instanceof B) // true 

    Passando B come il terzo argomento a Reflect.construct (), il valore prototipo del obj l'oggetto è fatto per essere lo stesso come il prototipo di BIl costruttore (che ha le proprietà Messaggio e dati).

    così, obj può accedere a Messaggio e dati, disponibile al suo prototipo. Ma, da allora obj è fatto usando UN, ha anche il suo Messaggio esso ricevuto da UN.

    Nonostante obj è costruito come un array, lo è non un esempio di schieramento, perché il suo prototipo è impostato su Oggetto.

     obj = Reflect.construct (Array, [1,2,3], Object) console.log (obj) // Array [1, 2, 3] console.log (obj instanceof Array) // false 

    Reflect.construct () può essere utile quando vuoi creare un oggetto usando più di un progetto.

    3. Il Object.create () metodo

    Puoi anche creare un nuovo oggetto ordinario con un prototipo specifico attraverso Object.create (). Anche questo potrebbe sembrare molto simile all'utilizzo del nuovo operatore, ma non lo è.

     Object.create (O [, propertiesObject]) 

    Il O argomento è un oggetto che serve il prototipo per il nuovo oggetto che verrà creato. L'opzionale propertiesObject l'argomento è un lista di proprietà potresti voler aggiungere al nuovo oggetto.

     class A constructor ()  message () console.log ('message from A') var obj = Object.create (new A (), data: scrivibile: true, configurabile: true, valore: function () return 'data from obj') console.log (obj.message ()) // messaggio da A console.log (obj.data ()) // dati da obj obj1 = Object.create ( nuovo A (), pippo: scrivibile: true, configurabile: true, valore: function () return 'pippo da obj1') console.log (obj1.message ()) // messaggio da una console. log (obj1.foo ()) // pippo di obj1 

    Nel obj oggetto, la proprietà aggiunta è dati, nel frattempo obj1, suo foo. Quindi, come vedi, possiamo avere proprietà e metodi aggiunti a un nuovo oggetto.

    Questo è fantastico quando vuoi creare più oggetti dello stesso tipo ma con diverse proprietà o metodi supplementari. Il Object.create () la sintassi salva la difficoltà di codificarli tutti separatamente.