Maison > interface Web > js tutoriel > Résumé de l'utilisation de la méthode bind dans ECMAScript5 (ES5)_Connaissances de base

Résumé de l'utilisation de la méthode bind dans ECMAScript5 (ES5)_Connaissances de base

WBOY
Libérer: 2016-05-16 16:00:33
original
1149 Les gens l'ont consulté

J'ai toujours été vague sur les choses liées à cela, comme appeler, postuler, etc. Cette fois, j'ai vu une question de test écrite liée à la liaison, j'ai donc écrit cet article comme rappel.

 Bind, comme call et apply, peut changer le this indiqué par le contexte. La différence est que call, comme apply, fait directement référence à la méthode, tandis que bind renvoie une méthode après la liaison, mais le noyau interne est toujours apply.

Regardez directement l'exemple :

Copier le code Le code est le suivant :

var obj = {
une : 1,
b : 2,
getCount : fonction(c, d) {
Renvoie this.a this.b c d;
>
};

fenêtre.a = fenêtre.b = 0;
console.log(obj.getCount(3, 4)); // 10
var func = obj.getCount;
console.log(func(3, 4)); // 7

Pourquoi cela se produit-il ? Parce que dans le contexte de func, c'est window ! L'existence de bind consiste à changer ce pointeur pour obtenir la valeur souhaitée :

Copier le code Le code est le suivant :

var obj = {
une : 1,
b : 2,
getCount : fonction(c, d) {
Renvoie this.a this.b c d;
>
};

fenêtre.a = fenêtre.b = 0;
var func = obj.getCount.bind(obj);
console.log(func(3, 4)); // 10

Bind est une méthode d'extension de fonction. Après la liaison, le code relie le pointeur this (obj) à l'intérieur de func, mais il n'est pas compatible avec ie6~8. Le code compatible est le suivant :

.

Copier le code Le code est le suivant :

var obj = {
une : 1,
b : 2,
getCount : fonction(c, d) {
Renvoie this.a this.b c d;
>
};

Function.prototype.bind = Function.prototype.bind || fonction (contexte) {
var ça = ceci;
return function() {
// console.log(arguments); // console [3,4] si c'est à dire<6-8>
Renvoie that.apply(context, arguments);

>
>
fenêtre.a = fenêtre.b = 0;
var func = obj.getCount.bind(obj);
console.log(func(3, 4)); // 10

En fait, à mon avis, le cœur de bind est de renvoyer une méthode non exécutée Si vous utilisez apply ou call directement :

Copier le code Le code est le suivant :

var ans = obj.getCount.apply(obj, [3, 4]);
console.log(ans); // 10

Il est impossible d'utiliser le constructeur de fonction func abrégé, utilisez donc bind pour passer ce pointeur, puis renvoyez une méthode non exécutée. L'implémentation est assez intelligente.
Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal