2012-05-31 23 views
5

C'è qualche differenza tra questi due:Qual è la differenza tra questi due?

var test1 = function() { 
    this.method1 = function() {} 
} 

e

var test2 = function() {}; 
test2.method1 = function() {}; 
+4

Sì. Errore di sintassi: 'var test2 = function();' – diolemo

+0

@diolemo Ho corretto l'errore di sintassi. – Triptych

risposta

4

Il primo frammento prende this oggetto, qualunque esso sia, e assegna una funzione al suo alloggiamento (campo) denominato method1.this possono rappresentare oggetti diversi, a seconda di come viene chiamato test1:

  • quando chiamata come una funzione autonoma - test1() - this sarà window
  • quando chiamato come costruttore - new test1() - this riferisce a l'oggetto viene creato
  • quando chiamato tramite call o apply - test1.apply(someObject) - this riferisce all'argomento

Il secondo frammento prende l'oggetto test2 e assegna una funzione allo slot method1.

1

Il primo modo è un costruttore che crea più oggetti e ha bisogno di avere la parola chiave new:

var mytest1 = new test1(); 
mytest1.method1(); 

Il secondo modo è subito pronto per l'uso:

test2.method1(); 
+4

Si noti che 'test1' non è necessariamente un costruttore. Potrebbe essere usato come uno, ma potrebbe anche essere inteso per essere eseguito nel contesto di un oggetto esistente. – apsillers

0

Supponendo che la sintassi fosse corretta, il primo è un costruttore che fornisce tutti gli oggetti test1 creati tramite new test1() un metodo chiamato metodo1. Il secondo aggiunge semplicemente una funzione all'oggetto costruttore. In javascript, le funzioni sono oggetti che possono avere proprietà (compresi i metodi).

0

La prima versione effettivamente crea un metodo disponibile per tutti gli oggetti istanziati in questo modo:

var o = new test1(); 
o.test1(); 

Il secondo semplicemente allegata una funzione come un attributo della funzione test2. Se hai familiarità con altri linguaggi OO basati su classi, funziona come un metodo statico. Non avrai accesso al puntatore this nel secondo esempio.

0

Il primo:

var test1 = function() { 
    this.method1 = function() {} 

}

Definisce la funzione "test1". Una volta (e solo quando) "test1" viene chiamato, "this.method1" sarà definito come una funzione, che non fa nulla.

La seconda:

var test2 = function() {}; 
test2.method1 = function() {}; 

creare la funzione "test2" e allo stesso tempo definisce la funzione "test2.method1", senza la necessità di richiamare la prima funzione.

0

Il primo imposta la proprietà method1 su qualsiasi richiamo test1().

La seconda definisce una funzione vuota e imposta la proprietà Method1 su test2

Problemi correlati