Wydaje się, że brakuje średnik:
function Foo() {
}
Foo.prototype.alert = function() {
alert(this);
}; //Semi-colon here!
(new Foo()).alert();
Oto fiddle, w którym wydaje się działać zgodnie z oczekiwaniami.
Co się rzeczywiście dzieje jest to, że metoda alert
jest wywoływana natychmiast z nową instancję Foo
przeszedł do niego, a alert
następnie wezwał zwracanej wartości (co jest undefined
):
Foo.prototype.alert = function() {
alert(this);
}(new Foo()).alert();
Jak @Nemoy wspomniał, że jeśli po prostu użyjesz new Foo().alert()
, otrzymasz oczekiwane zachowanie, ponieważ automatyczne wstawienie średnika spowoduje wstawienie średnika we właściwym miejscu (brak średnika nie zmienia znaczenia kod). Ponieważ operator new
ma najwyższy priorytet, nawiasy nie są wymagane.
jsFiddle demo. Wygląda na to, że drugie "ostrzeżenie" nie zostanie wykonane: http://jsfiddle.net/sf3M3/ –