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() {};
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() {};
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
:
test1()
- this
sarà window
new test1()
- this
riferisce a l'oggetto viene creatocall
o apply
- test1.apply(someObject)
- this
riferisce all'argomentoIl secondo frammento prende l'oggetto test2
e assegna una funzione allo slot method1
.
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();
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
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).
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.
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.
Il primo imposta la proprietà method1 su qualsiasi richiamo test1().
La seconda definisce una funzione vuota e imposta la proprietà Method1 su test2
Sì. Errore di sintassi: 'var test2 = function();' – diolemo
@diolemo Ho corretto l'errore di sintassi. – Triptych