Heim > Web-Frontend > js-Tutorial > Hauptteil

So verwenden Sie Variablen zum Speichern von Argumentobjekten in JS

高洛峰
Freigeben: 2017-01-04 17:11:43
Original
1361 Leute haben es durchsucht

Ein Iterator ist ein Objekt, das sequentiell auf eine Datensammlung zugreifen kann. Eine typische API ist die nächste Methode. Diese Methode ruft den nächsten Wert in der Sequenz ab.

Iterator-Beispiel

Frage: Ich möchte eine praktische Funktion schreiben, die eine beliebige Anzahl von Parametern akzeptieren und einen Iterator für diese Werte erstellen kann.

Hier ist der Testcode:

var it=values(,,,,,,,,);
it.next();//
it.next();//
it.next();//
Nach dem Login kopieren
Nach dem Login kopieren

Analyse: Da die Wertefunktion eine beliebige Anzahl von Parametern empfangen muss, müssen die im vorherigen Abschnitt erwähnten variablen Parameter empfangen werden Hier wird die Funktionsmethode verwendet. Dann durchläuft das darin enthaltene Iteratorobjekt die Elemente des Argumentobjekts.

Vorläufige Codierung

function values(){
var i=,n=arguments.length;
return {
hasNext:function(){
return i<n;
},
next:function(){
if(this.hasNext()){
return arguments[i++];
}
throw new Error("已经到达最后啦");
}
}
}
Nach dem Login kopieren

Test mit dem oben genannten Testcode

var it=values(,,,,,,,,);
it.next();//undefined
it.next();//undefined
it.next();//undefined
Nach dem Login kopieren

Fehleranalyse

Ergebnisse beim Ausführen des Codes Dies ist nicht korrekt. Das anfängliche Codierungsverfahren wird im Folgenden analysiert.

function values(){
var i=,n=arguments.length;//这里没有错误,arguments是values里的内置对象
return {
hasNext:function(){
return i<n;
},
next:function(){
if(this.hasNext()){
return arguments[i++];//错误出现在这里,arguments是next方法函数的内置对象。
}
throw new Error("已经到达最后啦");
}
}
}
Nach dem Login kopieren

Der Referenzfehler hier ist einem anderen Kopfschmerzobjekt sehr ähnlich, nämlich diesem. Wenn Sie mit dem Zeiger davon arbeiten, verwenden Sie normalerweise Variablen und speichern den korrekten Wert. Dann verwenden Sie diese Variable an anderer Stelle. Dann kommt die Lösung für das Argumentobjekt heraus, wobei eine Variable zum Speichern verwendet wird, sodass es kein Problem mit der Referenz des Argumentobjekts gibt.

Erneut kodieren

function values(){
var i=,n=arguments.length,arg=arguments;
return {
hasNext:function(){
return i<n;
},
next:function(){
if(this.hasNext()){
return arg[i++];
}
throw new Error("已经到达最后啦");
}
}
}
Nach dem Login kopieren
Nach dem Login kopieren

Der Referenzfehler hier ist einem anderen Kopfschmerz verursachenden Objekt sehr ähnlich, nämlich diesem. Wenn Sie mit dem Zeiger davon arbeiten, verwenden Sie normalerweise Variablen und speichern den korrekten Wert. Dann verwenden Sie diese Variable an anderer Stelle. Dann kommt die Lösung für das Argumentobjekt heraus, wobei eine Variable zum Speichern verwendet wird, sodass es kein Problem mit der Referenz des Argumentobjekts gibt.

Erneut codieren

function values(){
var i=,n=arguments.length,arg=arguments;
return {
hasNext:function(){
return i<n;
},
next:function(){
if(this.hasNext()){
return arg[i++];
}
throw new Error("已经到达最后啦");
}
}
}
Nach dem Login kopieren
Nach dem Login kopieren

Führen Sie den Testcode aus

var it=values(,,,,,,,,);
it.next();//
it.next();//
it.next();//
Nach dem Login kopieren
Nach dem Login kopieren

Die Ergebnisse sind die gleichen wie erwartet.

Tipp

Achten Sie auf die Verschachtelungsebenen von Funktionen, wenn Sie auf Argumente verweisen

Binden Sie einen explizit bereichsbezogenen Verweis an die Argumentvariable, damit diese verschachtelt werden kann. Referenzieren Sie sie im Funktionssatz

Anhang 1: Iterator

Iterator (Iterator), manchmal auch Cursor (Cursor) genannt, ist ein Software-Entwurfsmuster in der Programmierung Durch die Schnittstelle am Container muss sich der Designer nicht um den Inhalt des Containers kümmern.

Iterator UML-Klassendiagramm

So verwenden Sie Variablen zum Speichern von Argumentobjekten in JS

Iterator js-Implementierung

Ich weiß ein wenig über Designmuster, aber In bestimmten Projekten handelt es sich bei den meisten um Fabrikmodelle, andere werden nur selten verwendet. Das Folgende ist eine einfache Implementierung. Wenn etwas nicht stimmt, teilen Sie es bitte mit.

Der Code lautet wie folgt

function List(){
this.data=[];
}
List.prototype={
add:function(){
var args=[].slice.call(arguments)
this.data=this.data.concat(args); 
},
remove:function(i){
this.data.splice(i,);
},
iterator:function(){
return new Iterator(this);
}
}
function Iterator(list){
this.list=list;
this.cur=;
};
Iterator.prototype={
hasNext:function(){
return this.cur<this.list.data.length-;
},
next:function(){
if(this.hasNext()){
return this.list.data[this.cur++];
}
throw new Error(&#39;已经到底了~&#39;);
},
remove:function(){
this.list.remove(this.cur);
}
}
var list=new List();
var it=list.iterator();
list.add(,,,,,,,,);
it.next();//
it.next();//
it.next();//
Nach dem Login kopieren

Das Obige ist die Methode, die der Editor Ihnen vorstellt, wie Sie Variablen verwenden, um Argumentobjekte in JS zu speichern. Ich hoffe, dass dies der Fall sein wird hilfreich für alle!

Weitere verwandte Artikel zur Verwendung von Variablen zum Speichern von Argumentobjekten in JS finden Sie auf der chinesischen PHP-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