Der Funktionsname ruft bind(this) auf

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

おすすめ

転載: blog.csdn.net/lanxing_huangyao/article/details/124394618