Las funciones y diferencias de llamar, aplicar y vincular.

Prefacio

  • call, apply y bind se denominan enlaces fuertes de this y se utilizan para cambiar el puntero this cuando se ejecuta una función. Todas sus aplicaciones actuales se basan en este punto.

aplicar()

  • El método apply() recibe dos parámetros: uno es el ámbito en el que se ejecuta la función y el otro es la matriz de parámetros. Entre ellos, el segundo parámetro puede ser una instancia de Array o un objeto de argumentos.
function sum(num1, num2) {
    
    
  return num1 + num2
}
function callSum1(num1, num2) {
    
    
  return sum.apply(this, arguments) // 传入 arguments 对象
}
function callSum2(num1, num2) {
    
    
  return sum.apply(this, [num1, num2]) // 传入数组
}
console.log(callSum1(10, 10)) //20
console.log(callSum2(10, 10)) //20

llamar()

  • El método call() tiene la misma función que el método apply(), la única diferencia entre ellos es la forma en que reciben los parámetros. Cuando se utiliza el método call(), los parámetros pasados ​​a la función deben enumerarse uno por uno.
function sum(num1, num2) {
    
    
  return num1 + num2
}
function callSum(num1, num2) {
    
    
  return sum.call(this, num1, num2)
}
console.log(callSum(10, 10)) //20
  • Los resultados devueltos por el método call() y el método apply() son exactamente los mismos. En cuanto a si usar apply() o call(), todo depende de qué método para pasar parámetros a la función es más conveniente.
  • Número de parámetros: si el orden está determinado, utilice call. Si el orden es incierto, utilice apply.
  • Considere la legibilidad: si la cantidad de parámetros es pequeña, use call. Si la cantidad de parámetros es grande, integre los parámetros en una matriz y use aplicar.

unir()

  • El método bind() crea una instancia de una función cuyo valor está vinculado al valor pasado a la función bind(). Esto significa que bind() devolverá una nueva función.
window.color = 'red'
var o = {
    
     color: 'blue' }
function sayColor() {
    
    
  alert(this.color)
}
var objectSayColor = sayColor.bind(o)
objectSayColor() //blue

La diferencia entre llamar, aplicar y vincular

  • implementar:
    • call/apply ejecuta la función inmediatamente después de cambiar este contexto de la función
    • bind devuelve la función después de cambiar el contexto y no ejecuta la función
function add(a, b) {
    
    
  return a + b
}

function sub(a, b) {
    
    
  return a - b
}

add.bind(sub, 5, 3) // 这时,并不会返回 8
add.bind(sub, 5, 3)() // 调用后,返回 8
  • valor de retorno:
    • llamar, aplicar devuelve el resultado de la ejecución de la diversión
    • bind devuelve una copia de fun, especifica este puntero de fun y guarda los parámetros de fun.

Los conceptos centrales de llamar, aplicar y vincular.

  • De los ejemplos simples anteriores, podemos ver que llamar, aplicar y vincular son métodos prestados de otros objetos. El objeto A tiene un método y el objeto B también necesita usar el mismo método por alguna razón. En este momento, puede dejar que Préstelo B. El método del objeto A no solo logra el propósito, sino que también ahorra memoria.

Supongo que te gusta

Origin blog.csdn.net/yuan0209/article/details/128038235
Recomendado
Clasificación