Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Problem mit for(i in param) Schleife [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Problem mit for(i in param) Schleife


 
Günni
04-12-2006, 15:35 
 
Hallo zusammen,
ich habe das Javascript Objekt Array um folgende zwei Funktionen erweitert:

/**
* Erweitert das Array Element um die Funktion remove(index)
*
* @author Günther Bauer
* @param {int} n
*/
Array.prototype.remove = function(n) {
if(n>=0 && n<this.length) {
if(n<this.length) {
var x = -1;
while((++x)<this.length) {
if(x>=n) {
this[x] = this[x+1];
}
}
}
this.pop();
}
};

/**
* Erweitert das Array Element um die Funktion in_array(value)
*
* @author Günther Bauer
* @param {param} value
* @return Erfolgsmeldung
* @type bool
*/
Array.prototype.in_array = function(value)
{
for(var i = 0; i < this.length; i++) {
if(this[i] === value) {
return true;
}
}
return false;
}

Wenn ich nun ein Array wie

var param = new Array();
param["do"] = "get";
param["id"] = "id";

erstellen, übernimmt er hier ebenfalls die von mir zwei implementierten Funktionen in das Array rein. Beim durchführen einer

for(i in param)

Schleife wird dies Sichtbar, wenn man das gesamte Array ausgeben lässt.
Wie kann ich dies verhindern, dass diese Funktionen in das Array mit übernommen werden und ich somit nur das von mir definierte Array erhalte?

 
wahsaga
04-12-2006, 16:11 
 
Assoziative Arrays gibt es in Javascript nicht.

Da auch ein Array ist nur ein Objekt ist, weisst du mit
param["do"] = "get";
seinem Attribut do den Wert "get" zu.


Und das for-in-Schleifenkonstrukt ist nun mal dafür gedacht, über alle Attribute zu iterieren.
Wenn du dabei bestimmte Attribute/Methoden nicht zu sehen bekommen willst - dann musst du sie ignorieren.
(Man könnte sich z.B. über prototype noch einen Iterator basteln, der diese speziellen Attribute/Methoden - und dabei natürlich auch sich selber - ignoriert, und nur den Rest berücksichtigt.)

 
Günni
04-12-2006, 16:35 
 
Ich nehme die Prüfung nun durch die Funktion hasOwnProperty vor.

for (var propertyName in someObject) {
if (someObject.hasOwnProperty(propertyName)) {
...
}
}

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:03 Uhr.