20 Stimmen

Javascript-Getters/Setters im IE?

Aus welchem Grund auch immer, Javascript-Getter/Setzer für benutzerdefinierte Objekte scheinen mit jedem Browser außer dem IE zu funktionieren.

Verfügt der IE über einen anderen, nicht standardisierten Mechanismus für diese Funktion? (Wie bei vielen anderen Funktionen)

Wenn nicht, gibt es irgendwelche Umgehungsmöglichkeiten, um die gleiche Funktionalität zu erreichen?

1 Stimmen

Ie9 und ie10 unterstützen dies jetzt: kangax.github.com/es5-compat-table

0 Stimmen

Sie werden bei Objektliteralen unterstützt, aber nicht bei Objektprototypen im IE :(. robertnyman.com/javascript/

8voto

Nosredna Punkte 78203

Der IE8 hat es geschafft defineProperty aber nur für DOM-Objekte. Angeblich soll es aber irgendwann auch für JavaScript-Objekte kommen.

4 Stimmen

Irgendwann? Also werden wir es im IE 10 sehen? ;)

0 Stimmen

Interessant - mir war nicht bewusst, dass dies hinzugefügt wurde! @musicfreak: Du und dein sonniger Optimismus...

27 Stimmen

Wir werden es vielleicht im IE10 sehen, aber wir werden immer noch für den IE6 programmieren.

5voto

linusthe3rd Punkte 3234

Resigs Beitrag verweist auf seine env.js-Implementierung, die das erste Mal ist, dass er die Getter- und Setter-Methodik verwendet, nach der Sie suchen. Der Grund, warum dieser Stil der Arbeiten gut für ihn ist, weil sie nicht in einer Browser-basierten Umgebung verwendet werden, env.js ist in erster Linie für Server-seitige JS oder Skripting-Umgebungen wie Rhino konzentriert.

Um die Browserkompatibilität zu gewährleisten und sich auf einen Aspekt zu konzentrieren, den JavaScript sehr gut beherrscht, verwenden Sie Closures für Ihre Getter- und Setter-Methoden, um Objekteigenschaften zu schützen.

Zum Beispiel:

foo: function(val) {
     var bar = val;
     this.setBar: function(newBar) { 
         bar = newBar;
     },
     this.getBar: function() {
         return bar;
     }
}

Das wird dazu führen:

var checkFoo = foo("cool!");
alert(checkFoo.getBar()); //cool!
checkFoo.setBar("nice!");
alert(checkFoo.getBar()); //nice!

3 Stimmen

Ist dieser Rat 3 Jahre später immer noch gut? Blick auf diese Kompatibilität Tabelle scheint wie Unterstützung in IE ist besser: kangax.github.com/es5-compat-table

3voto

MandoMando Punkte 4995

Es gibt eine Lösung für IE6+, die das onpropertychange-Ereignis und die neuere Spezifikation defineProperty verwendet. Der kleine Haken ist, dass Sie Ihre Variable zu einem Dom-Objekt machen müssen.

Alle Einzelheiten:

http://johndyer.name/native-browser-get-set-properties-in-javascript/

1voto

Für alte IE-Browser können Sie auch VB verwenden, um Getter und Setter zu emulieren Schauen Sie sich dies an Getter und Setter für alle IE mit browserübergreifender VBClass!

0 Stimmen

Sie sollten vielleicht die wichtigsten Details des von Ihnen angegebenen Links hinzufügen. So wie sie (Ihre Antwort) steht, ist sie zwar korrekt, aber wenn die URL, auf die Sie verlinken, nicht mehr verfügbar ist, wird sie weniger hilfreich sein.

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