Maison > Article > interface Web > Analyse approfondie des compétences d'application, d'appel et de liaison dans JS_javascript
En Javascript, Function est un objet. Le pointeur this dans l’objet Function dépend de la manière dont la fonction est appelée. Utiliser apply, call et bind peut tous changer le pointeur de this dans l'objet fonction. Avant de parler des différences, résumons les similitudes entre les trois :
.
1. Ils sont tous utilisés pour changer le point de l'objet this de la fonction.
2. Le premier paramètre est l'objet vers lequel il pointe.
3. Vous pouvez utiliser les paramètres suivants pour transmettre des paramètres.
méthode d'appel :
Syntaxe : call([thisObj[,arg1[, arg2[, [,.argN]]]]])
Définition : Appelez une méthode d'un objet pour remplacer l'objet actuel par un autre objet.
Description : La méthode call peut être utilisée pour appeler une méthode à la place d’un autre objet. La méthode d'appel modifie le contexte d'objet d'une fonction du contexte initial au nouvel objet spécifié par thisObj.
Si le paramètre thisObj n'est pas fourni, l'objet Global est utilisé comme thisObj.
postuler :
Syntaxe : apply(thisObj, paramètre de tableau)
Définition : Appliquer une méthode d'un objet et remplacer l'objet actuel par un autre objet
Remarque : Si le paramètre n'est pas de type tableau, une TypeError sera signalée.
lier :
Une méthode appelée bind a été étendue dans EcmaScript5 (non prise en charge par IE6, 7 et 8). bind est très similaire à call, par exemple, les paramètres acceptables sont divisés en deux parties et le premier paramètre est utilisé comme). une exécution L'objet de ceci dans le contexte de la fonction. Il y a deux différences :
①La valeur de retour de bind est une fonction ; ②L'utilisation des paramètres suivants est également différente
Regardez d'abord l'exemple 1 :
function add(a, b) { alert(a + b); } function sub(a, b) { alert(a - b); }
Pour appeler, vous pouvez l'utiliser comme ceci :
add.call(sub,3,1);Le résultat est 4
Pour postuler, vous pouvez l'utiliser comme ceci
add.apply(sub,[3,1]);Le résultat est 4
Pour la reliure, vous pouvez l'utiliser comme ceci :
add.bind(sub)(3,1); le résultat est 4
Vous pouvez voir que les résultats de sortie sont les mêmes, mais l'utilisation des paramètres de transmission est différente
Regardez l'exemple 2 :
function jone(name,age,work){ this.name=name; this.age=age; this.work=work; this.say=function(msg){ alert(msg+",我叫"+this.name+",我今年"+this.age+"岁,我是"+this.work) } } var jack={ name:"jack", age:'24', work:"学生" } var pet=new jone(); pet.say.apply(jack,["欢迎您"]) console.log(this.name)
Pour appeler, il vous faut ceci :
pet.say.call(jack,"Bienvenue!")
Pour postuler, vous avez besoin de ceci :
pet.say.apply(jack,["Bienvenue!"])
Pour lier, vous avez besoin de ceci :
pet.say.bind(jack,"Bienvenue")()
À ce moment, console.log(this.name) est affiché, et il s'avère que this.name est jack, et le contexte de this a changé
L'analyse approfondie ci-dessus de l'application, de l'appel et de la liaison dans JS est tout le contenu partagé par l'éditeur. J'espère qu'elle pourra vous donner une référence et j'espère que vous soutiendrez Script Home.