Yehuda Katz tiene a good writeup del método de JavaScript Function#call
. Su descripción debe responder a su pregunta, y muchas preguntas de seguimiento además.
Cuando se llama a una función directamente, usando la sintaxis general:
var foo = function() {
console.log("foo");
return this;
};
foo(); // evaluates to `window`
Entonces this
dentro de la llamada a la función es lo this
está fuera de la llamada a la función. De forma predeterminada, en el navegador, this
fuera de cualquier llamada de función es window
. Por lo tanto, dentro de la llamada de función como se indica anteriormente, this
también es por defecto window
.
Cuando se llama a una función utilizando la sintaxis método de llamada:
var bar = {
foo: function() {
console.log("foo");
return this;
}
};
bar.foo(); // evaluates to `bar`
Entonces this
dentro de la llamada a la función es el objeto a la izquierda del punto más a la derecha: en este caso, bar
.
Podemos simular esta situación usando call
.
Cuando se configura una función fuera un objeto y desea llamar con this
dentro de la llamada a la función se establece en un objeto, puede:
var foo = function() {
console.log("foo");
return this;
}
var bar = { };
foo.call(bar); // evaluates to `bar`
Puede utilizar esta técnica para pasar argumentos, así:
var foo = function(arg1, arg2) {
console.log("foo");
return arg1 + arg2;
}
var bar = { };
foo.call(bar, "abc", "xyz"); // evaluates to `"abcxyz"`
[Llamada de documentación de MDN()] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call) – epascarello