Parece que le falta un punto y coma:
function Foo() {
}
Foo.prototype.alert = function() {
alert(this);
}; //Semi-colon here!
(new Foo()).alert();
He aquí una fiddle en la que parece funcionar como se espera.
Lo que está sucediendo es que el método alert
se llamó de inmediato, con una nueva instancia de Foo
pasado a él, y alert
continuación, se llama en el valor de retorno (que es undefined
):
Foo.prototype.alert = function() {
alert(this);
}(new Foo()).alert();
Como @Nemoy ha mencionado, si solo usa new Foo().alert()
obtendrá el comportamiento esperado porque la inserción automática de punto y coma colocará un punto y coma en el lugar correcto para usted (la falta de un punto y coma no cambia el significado del código). Y como el operador new
tiene la precedencia más alta, los paréntesis no son necesarios.
js Demo de Fiddle. Parece que la segunda 'alerta' no se ejecuta: http://jsfiddle.net/sf3M3/ –