que tenía la misma pregunta y luego encontré la respuesta, de la siguiente manera:
Realmente es para
(0, foo.fn)();
Hay que recordar que en JavaScript, cuando se invoca foo.fn()
, entonces dentro de fn
, el this
está obligado a foo
. Si utiliza
var g = foo.fn;
g();
a continuación, cuando se invoca g
anterior, el this
está ligado al objeto global (window
, en el contexto de un navegador web).
¿Entonces necesita definir g
como arriba? ¿Puede hacer algo como
(foo.fn)();
La respuesta es no. JavaScript lo tratará igual que foo.fn();
, ya que es solo foo.fn
con el ()
redundante que se puede eliminar.
Pero hay una manera de moverse es, y es exactamente a utilizar the comma operator, which Mozilla stated as
El operador coma evalúa cada uno de sus operandos (de izquierda a derecha) y devuelve el valor del último operando
Así, utilizando
(0, foo.fn)();
la (0, foo.fn)
obtendrá evaluado con una referencia a la función, lik e g
arriba, y luego se invoca la función. Y luego, this
no está vinculado a foo
, sino que está vinculado al objeto global.
Así que el código escrito de esta manera, es "cortar el enlace".
Ejemplo:
var foo = {
fullName: "Peter",
sayName: function() { console.log("My name is", this.fullName); }
};
window.fullName = "Shiny";
foo.sayName(); // My name is Peter
(foo.sayName)(); // My name is Peter
(0, foo.sayName)(); // My name is Shiny
posible duplicado de [javascript coma operador] (http://stackoverflow.com/questions/5580596/javascript-comma-operator) –
Fuera de curiosidad, puede publicar más de la contexto de donde aparece esto? – Austin
Estaba comprobando el código de https://www.google.fr/xjs/_/js/s/sy46,zr/rt=j/ver=-wnZQEUYm8E.en_US./d=0/rs=AItRSTNMBUOhWluxPqsKFY9CVTnMlxNz6w – korko