Sembra che vi manca un punto e virgola:
function Foo() {
}
Foo.prototype.alert = function() {
alert(this);
}; //Semi-colon here!
(new Foo()).alert();
Ecco un fiddle in cui sembra funzionare come previsto.
Che cosa realmente sta accadendo è che il metodo alert
viene chiamato immediatamente, con una nuova istanza di Foo
passato in esso, e alert
viene quindi invitato il valore di ritorno (che è undefined
):
Foo.prototype.alert = function() {
alert(this);
}(new Foo()).alert();
Come @Nemoy ha menzionato, se usi semplicemente new Foo().alert()
otterrai il comportamento previsto perché l'inserimento automatico del punto e virgola metterà un punto e virgola nel posto giusto per te (la mancanza di un punto e virgola non cambia il significato del codice). E poiché l'operatore new
ha la precedenza più alta, le parentesi non sono obbligatorie.
fonte
2012-03-20 06:58:59
jsFiddle demo. Sembra che il secondo 'alert' non venga eseguito: http://jsfiddle.net/sf3M3/ –