2010-08-10 16 views
13

Qual è la differenza traDifferenza tra una classe e un oggetto in JavaScript

var myView = function() { 
//something goes here 
}; 

e

var myView = function() { 
//something goes here 
    return { 
     a: x, 
     b: y 
}(); 

Credo che il primo frammento di codice crea una classe "dinamico", in modo che si può dire

var anotherView = new myView(); 

e il secondo snippet è simile a un oggetto "dinamico" singleton, ma non sono molto sicuro.

risposta

11

Javascript utilizza l'ereditarietà prototipale, pertanto è nessuna classe di per sé. Tutto è un oggetto; è solo che alcuni oggetti hanno un oggetto padre comune i cui metodi/variabili saranno trovati quando la risoluzione del nome cerca la catena del prototipo.

Il primo snippet di codice crea un oggetto chiamato myView il cui tipo è una funzione. Il secondo snippet definisce un metodo anonimo che restituisce un oggetto (con due proprietà, a e b) e quindi chiama immediatamente questo metodo, assegnando il risultato a myView. Quindi in questo secondo caso, myView è un oggetto con due proprietà autodefinite.

Potrebbe aiutarti a leggere la descrizione di Douglas Crockford di prototypal inheritance in Javascript, poiché sembra che tu sia un po 'confuso nei dettagli.

+0

Sono consapevole che non ci sono classi in JS, e ho usato il termine "classe" in un senso sciolto - il mio errore! Tuttavia, detto questo, grazie per la spiegazione. – JamieJag

2

Non ci sono classi in javascript.

Come hai detto, il tuo primo esempio sarebbe per un oggetto riutilizzabile, mentre il tuo secondo esempio è solo per un oggetto singleton.

La differenza principale qui è che stai richiamando quella funzione immediatamente nel secondo esempio e restituisce un oggetto, mentre è necessario richiamare esplicitamente la prima funzione ogni volta usando qualcosa come a=new myView() è il() che fornisce quell'invocazione.

Posso usare il secondo esempio (nota come modello di modulo di Crockford) per un off compiti relative alla pagina, e il primo esempio per i componenti riutilizzabili all'interno di quella pagina (qualche elemento generato molte volte con i gestori, ecc)

anche leggi sull'ereditarietà del prototipo in modo da capire come utilizzare efficacemente il primo esempio per scrivere codice javascript con prestazioni migliori.

+0

ECMA 2015 Introdotta la lezione di js –

Problemi correlati