Heim  >  Artikel  >  Web-Frontend  >  So verwenden Sie Variablen zum Speichern von Argumentobjekten in JS

So verwenden Sie Variablen zum Speichern von Argumentobjekten in JS

高洛峰
高洛峰Original
2017-01-04 17:11:431310Durchsuche

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();//

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("已经到达最后啦");
}
}
}

Test mit dem oben genannten Testcode

var it=values(,,,,,,,,);
it.next();//undefined
it.next();//undefined
it.next();//undefined

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("已经到达最后啦");
}
}
}

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("已经到达最后啦");
}
}
}

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("已经到达最后啦");
}
}
}

Führen Sie den Testcode aus

var it=values(,,,,,,,,);
it.next();//
it.next();//
it.next();//

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();//

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!


Stellungnahme:
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