No; que son idénticos
Sin embargo, si se agrega new
de antemano y .something
después, van a ser diferentes.
Código 1
new (function() {
this.prop = 4;
})().prop;
Este código crea una nueva instancia de la clase de esta función, entonces se obtiene la propiedad prop
de la nueva instancia.
Devuelve 4
.
Es equivalente a
function MyClass() {
this.prop = 4;
}
new MyClass().prop;
Código 2
new (function() {
return { Class: function() { } };
}()).Class;
Este código llama new
en la propiedad Class
.
Dado que los paréntesis para la llamada de función están dentro del conjunto externo de paréntesis, no son recogidos por la expresión new
, y en su lugar llaman a la función normalmente, devolviendo su valor de retorno.
La expresión new
analiza hasta el .Class
y crea una instancia de eso. (Los paréntesis después new
son opcionales)
Es equivalente a
var namespace = { Class: function() { } };
function getNamespace() { return namespace; }
new (getNamespace()).Class;
//Or,
new namespace.Class;
Sin los paréntesis alrededor de la llamada a getNamespace()
, esto se analiza como (new getNamespace()).Class
— sería llamar a una instancia de la clase getNamespace
y devolver la propiedad Class
de la nueva instancia.
ver también [Localización de paréntesis para funciones de JavaScript en el anonimato de auto-ejecución?] (Http://stackoverflow.com/questions/3384504/location-of-parenthesis-for-auto-executing-anonymous-javascript-functions) o [¿Hay una diferencia entre (función() {...}()); y (function() {...})();?] (http://stackoverflow.com/questions/3783007/is-there-a-difference-between-function-and-function) – Bergi
justo cuando lo piensas todo en JS no es lo que esperas, lo es. engañado de nuevo! js primer idioma para usar pschology inversa !!! –