funciona - Función de llamada de Javascript
manual de javascript completo pdf (3)
He estado probando algunos códigos últimamente tratando de entender javascript un poco mejor. Luego me encontré con la función call()
que no puedo entender bien.
Tengo el siguiente código:
function hi(){
console.log("hi");
}
var bye = function(param, param2){
console.log(param);
console.log(param2);
console.log("bye");
}
Si llamo bye.call(hi(), 1, 2)
, obtengo hi 1 2 undefined
Y si llamo bye.cal(1,2)
, obtengo 2 undefined bye undefined
para lo cual entiendo que el primer parámetro de la función call()
tiene que ser una función, seguido de la cantidad de parámetros que acepta mi función bye
. Pero, ¿de dónde viene el último indefinido?
Este primer parámetro no tiene que ser una función. El primer parámetro es el objeto al que se establece la variable "this" en el contexto de la llamada a la función.
var bye = function(param, param2){
console.log(param);
console.log(param2);
console.log("bye");
console.log(this.x)
}
t = {''x'': 1};
bye.call(t, 1, 2);
Y la consola debería mostrar: 1, 2, "bye" y 1.
Lo indefinido es el valor de retorno de su función.
En tu primera llamada:
bye.call(hi(), 1, 2)
Está llamando a hi () (por lo que se imprime ''hola''), el valor de retorno no se utiliza, y 1 y 2 son los parámetros de adiós.
En tu segunda llamada:
bye.cal(1,2)
1 está asignado a esto. 2 es param, y param2 no está definido.
Obtendrá el valor indefinido porque su función no devuelve nada, solo imprime la salida en la pantalla. Entonces, tu código podría ser así:
var obj = {foo: "hi"};
var bye = function(param, param2){
console.log(this.foo);
console.log(param);
console.log(param2);
}
bye.call(obj, 1, 2) // "hi", 1, 2
Puede leer aquí en MDN para obtener más información sobre .call()
.
fn.call()
permite establecer el valor que tendrá cuando se llame a la función. Ese valor de this
debe ser el primer argumento para fn.call()
.