Heim > Web-Frontend > js-Tutorial > Hauptteil

Detaillierte Erläuterung des Anwendungscodes des js-Abschlusses und des Prototyps

php是最好的语言
Freigeben: 2018-08-10 16:35:09
Original
2072 Leute haben es durchsucht

1. Abschlüsse

Ein Abschluss in js ist eine Funktion (eine geschlossene Paketstruktur oder ein Raum, der zur Außenwelt nicht offen ist)

1. Durch Schließungen zu lösende Probleme

  • Auf Daten innerhalb der Funktion kann außerhalb der Funktion nicht zugegriffen werden

  • Zu sein Gelöst Das Problem besteht darin, dass auf die Daten innerhalb der Funktion indirekt von außen zugegriffen werden muss

2. Grundstruktur

 function outer(){
        var data = "数据";        return function(){
            return data;
        }
    }
Nach dem Login kopieren
 function outer(){
    var data = "数据";     return {
         getData:function(){
             return data;
         },
         setData:function(value){
             data = value;             return data;
         }
     }
 }
Nach dem Login kopieren

3 🎜>1) Verwenden Sie Closure, um das Timer-Problem zu lösen

由于js是单线程执行的,会先执行主任务,然后执行次要任务(包括setTimeOut和setInterval中的回调函数中的代码)
Nach dem Login kopieren

Zum Beispiel:

for(var i = 0 ; i < 10; i++){
    setTimeout(function(){
         console.log(i);
     },0);
 }
Nach dem Login kopieren

gibt nicht wie erwartet 1~10 aus, sondern 10 10, da die for-Schleife dies nicht tut wird ausgeführt, bis sie ausgeführt wird. setTimeout-Rückruffunktion, wenn die Zeit abgelaufen ist, ausführen

Lösung:

 for(var i = 0; i< 3; i++){   function foo(j){
        return function(){
            console.log(j);
        };
    }    var f = foo(i);
    setTimeout(f, 0);
}
Nach dem Login kopieren
Dies gibt 1 2 3 aus

2) Verwenden Sie den Abschluss zum Speichern die Umgebung

Verschlüsse haben die gleiche Funktionsdefinition, speichern aber unterschiedliche lexikalische Umgebungen

function makeSizer(size) {
  return function() {
    document.body.style.fontSize = size + &#39;px&#39;;
  };
}var size12 = makeSizer(12);var size14 = makeSizer(14);var size16 = makeSizer(16);

document.getElementById(&#39;size-12&#39;).onclick = size12;
document.getElementById(&#39;size-14&#39;).onclick = size14;
document.getElementById(&#39;size-16&#39;).onclick = size16;
Nach dem Login kopieren

Der Text ändert sich, wenn auf 12, 14, 16 geklickt wird

Aber wenn Sie Ändern Sie die Schreibweise:

function makeSizer(size) {
    document.body.style.fontSize = size + &#39;px&#39;;
}
Nach dem Login kopieren
Wenn Sie so schreiben, beträgt die Textgröße alle 12, da sie dieselbe lexikalische Umgebung verwenden. Nachdem die erste ausgeführt wurde, haben die folgenden und die vorherigen dieselben lexikalische Umgebung

3) Erstellen Verwenden Sie Abschlüsse beim Erstellen von Objekten oder Klassen

Beim Erstellen eines neuen Objekts oder einer neuen Klasse sollten Methoden normalerweise mit dem Prototyp des Objekts verknüpft sein und nicht im definiert werden Konstruktor des Objekts. Der Grund dafür ist, dass die Methode jedes Mal neu zugewiesen wird, wenn der Konstruktor aufgerufen wird (d. h. jedes Objekt wird erstellt).

Zum Beispiel können wir so schreiben:
function MyObject(name, message) {
  this.name = name.toString();  this.message = message.toString();
}
MyObject.prototype.getName = function() {
  return this.name;
};
MyObject.prototype.getMessage = function() {
  return this.message;
};
Nach dem Login kopieren

2. Prototyp

Detaillierte Erläuterung des Anwendungscodes des js-Abschlusses und des PrototypsDetaillierte Erläuterung des Anwendungscodes des js-Abschlusses und des PrototypsVerwandte Empfehlungen:


Detaillierte Erläuterung der Verwendung von JS-Verschlüssen - JS-Tutorial

Details zu eingehenden Analyse- und Codeimplementierungsmethoden von Javascript-Verschlüssen

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Anwendungscodes des js-Abschlusses und des Prototyps. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!