En fait, c'est une chose très simple. Lisez attentivement pendant dix minutes et vous passerez d'une confusion totale à une compréhension complète !

D'abord, comprenez ce qui suit :

Exemple 1

obj.objAge;  // 17
obj.myFun()  // 小张年龄 undefined

Exemple 2

shows()  // 盲僧 

Comparez la différence de `this` entre les deux. Dans le premier, `this` dans la sortie imprimée pointe vers `obj` ; dans le second, la fonction `shows()` déclarée globalement a `this` égal à `window` ;

1. `call()`, `apply()` et `bind()` sont tous utilisés pour redéfinir l'objet `this` !

Par exemple :

obj.myFun.call(db);    // 德玛年龄 99
obj.myFun.apply(db);    // 德玛年龄 99
obj.myFun.bind(db)();   // 德玛年龄 99

À part le `()` supplémentaire après la méthode `bind`, les résultats renvoyés sont tous identiques !

De cela, nous pouvons conclure que `bind` renvoie une nouvelle fonction, et vous devez l'appeler pour qu'elle soit exécutée.

2. Comparaison de `call`, `bind` et `apply` lors du passage de paramètres

 
obj.myFun.call(db,'成都','上海');     // 德玛 年龄 99  来自 成都去往上海
obj.myFun.apply(db,['成都','上海']);      // 德玛 年龄 99  来自 成都去往上海  
obj.myFun.bind(db,'成都','上海')();       // 德玛 年龄 99  来自 成都去往上海
obj.myFun.bind(db,['成都','上海'])();   // 德玛 年龄 99  来自 成都, 上海去往 undefined
  

Une différence subtile !

Il n'est pas difficile de voir, à partir des quatre résultats ci-dessus :

Le premier paramètre de `call`, `bind` et `apply` est l'objet vers lequel `this` pointe. La différence intervient avec le deuxième paramètre :

Les paramètres de `call` sont placés directement. Les deuxième, troisième et nième paramètres sont tous séparés par des virgules et placés directement après lui.obj.myFun.call(db,'Chengdu', ... ,'string' )。

Tous les paramètres de `apply` doivent être placés dans un tableau et transmis.obj.myFun.apply(db,['Chengdu', ..., 'string' ])。

En plus de renvoyer une fonction, `bind` prend des paramètres de la même manière que `call`.

Bien sûr, les paramètres de ces trois méthodes ne sont pas limités au type `string`. Ils peuvent être de divers types, y compris des fonctions, des objets, etc. !

Adresse d'origine : https://www.cnblogs.com/Shd-Study/p/6560808.html