2 Stimmen

IE8-Eigenschaftsaufzählung ersetzter eingebauter Eigenschaften (z. B. "toString")

Ich habe ein sehr seltsames Problem mit der JS-Engine des IE8 (möglicherweise auch frühere Versionen, aber nicht IE9 im IE8-Modus, da die JS-Engine nicht zurückfällt). Vereinfachtes Beispiel:

var foo = { toString : 42, x : 22 };
for(var n in foo){ 
    console.log(n)
}

// result: "x"

Mit anderen Worten, die toString Eigenschaft wird nie aufgezählt. Auch würde valueOf , hasOwnProperty , usw... oder var x = 5; x.toFixed = 42;

Also jede Eigenschaft, die nativ vorhanden ist, kann nicht aufgezählt werden, soweit ich sagen kann, auch nachdem Sie es ersetzen...

Meine Frage: Kennt jemand eine Möglichkeit, darauf zuzugreifen?!? Ich brauche das, weil ich den Prototyp eines Objekts und die toString Funktion wird nicht aufgegriffen.

2voto

Šime Vidas Punkte 172810

Bei dem Verhalten, das Sie im IE beobachten, handelt es sich also um den so genannten "JScript DontEnum Bug", der im IE8 und darunter auftritt.

Im IE < 9 überspringt JScript jede Eigenschaft in einem Objekt, für das es eine gleichnamige Eigenschaft in der Prototypenkette des Objekts gibt, die das DontEnum-Attribut hat.

Source : https://developer.mozilla.org/en/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X