llamar - qué es un script de javascript externo
¿cuál es la diferencia entre ''llamar/aplicar'' y ''vincular'' (3)
La diferencia es cómo haces la llamada. Si ha usado bind
para recuperar una función con un límite de this
valor, solo llama a la función:
getx();
Si no tiene una función enlazada y desea configurarla, debe hacerlo mediante call
o apply
:
someFunction.call(objectToUseAsThis, arg1, arg2);
// or
someFunction.apply(objectToUseAsThis, [arg1, arg2]);
Tenga en cuenta que si tiene una función enlazada (como su getX
), usar call
on no tiene sentido, porque this
usted proporciona será anulado por el límite. (El uso de apply
aún puede ser útil, si tiene una matriz de valores que desea analizar como argumentos).
Esta pregunta ya tiene una respuesta aquí:
- Javascript call () & apply () vs bind ()? 17 respuestas
var obj = {
x: 81,
getX: function() {
console.log( this.x)
}
};
var getX = obj.getX.bind(obj);//use obj as ''this'';
getX();//81
var getX = function(){
obj.getX.apply(obj);
}
getX();//also 81
El uso de bind y call / apply se ve muy similar, quiero saber cuál es la diferencia entre ellos. Las dos funciones getX anteriores son las mismas.
.call()
- llama a la misma función con los argumentos especificados
.apply()
- llama a la misma función con los argumentos especificados en una matriz
.bind()
- crea una nueva función con el mismo cuerpo de función, con un valor preestablecido de this
(el primer argumento) y devuelve esa función.
En todos los casos, el primer argumento se usa como el valor de this
dentro de la función.
bind
devuelve una función que actuará como la función original pero con this
predefinida. Generalmente se usa cuando desea pasar una función a un controlador de eventos u otra devolución de llamada asincrónica.
call
y apply
llamará a una función que le permite especificar el valor de this
y cualquier argumento que reciba la función.
Su segundo ejemplo define una función anónima que llama apply
. Este es un patrón común; bind
proporciona una implementación estándar de lo que le permite hacerlo con una llamada de función simple (por lo tanto, es más rápido y fácil de escribir).