Les fonctions et les différences d'appel, d'application et de liaison

Préface

  • call, apply et bind sont appelés liaisons fortes de this et sont utilisés pour modifier le pointeur this lorsqu'une fonction est exécutée. Toutes leurs applications actuelles sont basées sur ce point.

appliquer()

  • La méthode apply() reçoit deux paramètres : l'un est la portée dans laquelle la fonction est exécutée et l'autre est le tableau de paramètres. Parmi eux, le deuxième paramètre peut être une instance de Array ou un objet arguments.
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

appel()

  • La méthode call() a la même fonction que la méthode apply(). La seule différence entre elles est la façon dont elles reçoivent les paramètres. Lors de l'utilisation de la méthode call(), les paramètres passés à la fonction doivent être listés un par un.
function sum(num1, num2) {
    
    
  return num1 + num2
}
function callSum(num1, num2) {
    
    
  return sum.call(this, num1, num2)
}
console.log(callSum(10, 10)) //20
  • Les résultats renvoyés par la méthode call() et la méthode apply() sont exactement les mêmes. Quant à savoir s'il faut utiliser apply() ou call(), tout dépend de la méthode de transmission des paramètres à la fonction la plus pratique.
  • Nombre de paramètres : Si l'ordre est déterminé, utilisez call. Si l'ordre est incertain, utilisez apply.
  • Tenez compte de la lisibilité : si le nombre de paramètres est petit, utilisez call. Si le nombre de paramètres est grand, intégrez les paramètres dans un tableau et utilisez apply.

lier()

  • La méthode bind() crée une instance d'une fonction dont cette valeur est liée à la valeur transmise à la fonction bind(). Cela signifie que bind() renverra une nouvelle fonction
window.color = 'red'
var o = {
    
     color: 'blue' }
function sayColor() {
    
    
  alert(this.color)
}
var objectSayColor = sayColor.bind(o)
objectSayColor() //blue

La différence entre appeler, appliquer et lier

  • mettre en œuvre:
    • call/apply exécute la fonction immédiatement après avoir modifié le contexte this de la fonction
    • bind renvoie la fonction après avoir changé le contexte et n'exécute pas la fonction
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
  • valeur de retour :
    • call, apply renvoie le résultat de l'exécution de fun
    • bind renvoie une copie de fun, spécifie le pointeur this de fun et enregistre les paramètres de fun.

Les concepts de base de l'appel, de l'application et de la liaison

  • À partir des exemples simples ci-dessus, nous pouvons voir que call, apply et bind sont des méthodes qui empruntent à d'autres objets. L'objet A a une méthode et l'objet B doit également utiliser la même méthode pour une raison quelconque. À ce stade, vous pouvez laisser B l'emprunte. La méthode de l'objet A atteint non seulement l'objectif, mais économise également de la mémoire.

Je suppose que tu aimes

Origine blog.csdn.net/yuan0209/article/details/128038235
conseillé
Classement