L'opérateur virgule évalue chacun de ses opérandes (de gauche à droite) et renvoie la valeur du dernier opérande.
console.log((1, 2)); // Returns 2 in console
console.log((a = b = 3, c = 4)); // Returns 4 in console
Alors, voyons un exemple:
var a = {
foo: function() {
console.log(this === window);
}
};
a.foo(); // Returns 'false' in console
(0, a.foo)(); // Returns 'true' in console
Maintenant, dans la foo
méthode, this
est égal à a
(car foo
est attaché à a
). Donc, si vous appelez a.foo(
) directement, il se connectera false
à la console.
Mais, si vous étiez appelé (0, a.foo)()
. L'expression (0, a.foo)
évaluera chacun de ses opérandes (de gauche à droite) et retournera la valeur du dernier opérande. En d'autres termes, (0, a.foo)
équivaut à
function() {
console.log(this === window);
}
Puisque cette fonction n'est plus attachée à rien, this
c'est l'objet global window
. C'est pourquoi il se connecte true
à la console lors de l'appel (0, a.foo)()
.
_b.a.call()
pour que l'intention soit claire.