Aujourd'hui, j'ai continué à étudier la mise en œuvre de la fonction de liaison et j'ai également appris les déclarations de la cale et du polyfill. Résumons-le maintenant.
if (! function.prototype.bind) {function.prototype.bind = function (othis) {if (typeof this! == "function") {// La chose la plus proche possible de la fonction Iscallable interne Ecmascript 5 lancez new typeError ("function.prototype.bind - ce qui essaie d'être lié n'est pas appelé"); } var aargs = array.prototype.slice.call (arguments, 1), ftobind = this, fnop = function () {}, fbound = function () {return ftobind.apply (this instance fnop && othis? this: othis || window, aargs.concat (array.pototype.slice.call (aruments)); }; fnop.prototype = this.prototype; fbound.prototype = new fnop (); retour fbound; };}Il s'agit d'une implémentation dans le document officiel. Je vais parler de ce que je veux dire sous deux aspects.
Le premier est le paramètre, l'utilisation d'agruments
var aargs = array.prototype.slice.call (arguments, 1), voici pour éliminer le tableau des paramètres de la fonction de liaison. Le premier paramètre ne fait pas (c'est-à-dire ne pas othis), qui est l'objet à lier à la méthode, et le second est
aargs.concat (array.prototype.slice.call (arguments))); Ici, nous utilisons la méthode du tableau, insérez les paramètres derrière le tableau des paramètres. Notez que cette fonction est renvoyée et exécutée. Son tableau de paramètres est le tableau de paramètres de la fonction FBOUND qui est renvoyé, de sorte que les tableaux de paramètres supérieurs et inférieurs sont différents, un peu comme le curry.
Le second est le contexte, où les changements de contexte sont difficiles à comprendre. La fonction de liaison est principalement utilisée pour lier le contexte.
ftobind = C'est ici le contexte de l'objet, suivi de la méthode d'application ci-dessous pour permettre à l'objet d'être forcé à utiliser le contexte
fnop.prototype = this.prototype;
fbound.prototype = new fnop ();
Ici, FNOP est utilisé comme intermédiaire pour FBOUND, garantissant que Fbound est exécuté dans le contexte lorsqu'il est défini. initialement
Bound.prototype = self.prototype peut intégrer les attributs d'origine, mais de cette manière, les deux attributs d'objet pointent au même endroit, la modification de Bound.prototype provoquera également le changement de prototype, ce qui n'est pas notre intention d'origine. Par conséquent, la transition à travers une fonction vide NOP peut effectivement empêcher cette situation de se produire.
L'article ci-dessus sur la simple implémentation de la fonction de liaison dans native js est tout le contenu que j'ai partagé avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.