Cet article vous apporte des exemples de code sur la méthode bind en JavaScript. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
appel, candidature et nouveau ont déjà été mis en œuvre. À propos, bind est également implémenté aujourd'hui.
Tout d'abord :
ok, le code ci-dessus~
Function.prototype.mybind = function(context){ let that = this; let args1 = Array.prototype.slice.call(arguments,1); let bindFn = function(){ let args2 = Array.prototype.slice.call(arguments); return that.apply(this instanceof bindFn?this:context,args1.concat(args2)); } let Fn = function(){}; Fn.prototype = this.prototype; bindFn.prototype = new Fn(); return bindFn; }
Tout d'abord, récupérez le premier paramètre passé args1, et interceptez-le ici car le premier paramètre est celui-ci. Ensuite, une fonction bindFn est déclarée, dans laquelle le deuxième paramètre passé args2 est obtenu et son exécution est renvoyée. Le "cela" ici est la fonction d'origine. Faites attention au jugement lors de l'exécution de la fonction d'origine et de la liaison de la fonction d'origine "ceci". S'il s'agit d'une instance produite par le constructeur bindFn new, alors il doit s'agir ici de l'instance elle-même. Au contraire, c'est this(context) passé par la méthode bind. Enfin, connectez les paramètres obtenus deux fois via concat() et transmettez-les, réalisant ainsi les trois premiers éléments.
Dernier élément : Les propriétés et méthodes du constructeur sont disponibles sur chaque instance. Ici, une fonction intermédiaire Fn est utilisée pour connecter la chaîne prototype. Le prototype de Fn est égal au prototype de celui-ci. Fn et this pointent vers le même objet prototype. Le prototype de bindFn est égal à l’instance de Fn. Le __proto__ de l'instance Fn pointe vers le prototype de Fn. Autrement dit, le prototype de bindFn pointe vers le même prototype que celui-ci, pointant vers le même objet prototype. À ce stade, vous avez implémenté votre propre méthode de liaison.
Le code est écrit, testons-le~
Function.prototype.mybind = function(context){ Laissez cela = ceci ; Soit args1 = Array.prototype.slice.call(arguments,1); Soit bindFn = function(){ Soit args2 = Array.prototype.slice.call(arguments); return that.apply(this instanceof bindFn?this:context,args1.concat(args2)); } Soit Fn = function(){}; Fn.prototype = this.prototype; bindFn.prototype = new Fn(); Renvoie bindFn; } soit obj = { nom: 'tigre' } fonction fn(nom,âge){ This.say = 'Woof wow~'; console.log(this); Console.log(this.name+'raised one'+name+','+age+'ans'); } /**Paramètres de passage pour la première fois*/ laissez bindFn = fn.mybind(obj,'
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!