Artikelverzeichnis
1 Frage
Ich verstehe nicht ganz, wie man bind(this) schreibt
Router.prototype.refresh = function () {
console.log('触发一次 hashchange,hash 值为', location.hash);
this.currentUrl = location.hash.slice(1) || '/';
this.routes[this.currentUrl]();
};
Router.prototype.init = function () {
window.addEventListener('hashchange', this.refresh.bind(this), false);
};
window.Router = new Router();
window.Router.init();
2 Die Funktion von bind(this)
- Kontext übergeben
In der Refresh-Methode gibt es das Schlüsselwort this, das den relevanten Code aufruft, und das interne This verweist auf den Aufrufer. Wenn Sie also bind(this) nicht verwenden, wird nach dem Auslösen des Ereignisses und nach dem Aufruf des Fensters „refresh, this“ angezeigt in der Aktualisierungsmethode zeigt auf das Fenster.
- bind(this), der this-Parameter, dient zur Angabe des Kontexts, und this innerhalb der Methode ist das übergebene Objekt
Wenn die Init-Methode ausgeführt wird, ist dies der aktuelle Router. Nach bind(this) und nachdem das Fenster die Aktualisierungsmethode aufgerufen hat, ist dieses Objekt in der Methode das eingehende Parameter-Router-Objekt
3 Zusammenfassung
- Die vom Fenster empfangene Methode kann nur als Methodenkörper verstanden werden. Jedes Objekt kann aufgerufen werden. Wenn es also im Methodenkörper vorhanden ist, muss der Kontext gebunden werden