Christian S.: Auf Prototypen von HTML Objekt zugreifen!?

Hi,

ich möchte folgendes realisieren:

Im Moment greife ich auf den Wert einer Selectbox mittels:

selectbox.options[selectbox.selectedIndex].value zu.

Das ist mir langsam zu lästig und ich frage mich ob dies auch einfacher geht.

Allen Selectboxen möchte ich die Property selectedValue verpassen, die mir genau oben das zurückgibt.

meinetwegen auch als Methode.

Dazu muss ich doch auf den Prototypen der selectbox zugreifen und dann etwa so was machen:

Selectbox.prototype.selectedValue = this.options[this.selectedIndex].value;

mit dem Date Objekt geht es ja auch (wenn ich es um eigene Methoden erweitern will):
// Beispiel:
Date.prototype.addDays = function ()
{
};

var date = new Date();
date.addDays();

Die Frage ist jetzt nur: wie komme ich an die Konstrukturen von den Selectboxen dran??

Geht das überhaupt?? Das wäre fast schon zu schön, dann könnte ich ja zB. auch das Event Objekt standardisieren:

Event.prototype.target = (this.target) ? this.target : this.srcElement;

Gruß
Christian

  1. Selectbox.prototype.selectedValue = this.options[this.selectedIndex].value;

    mit dem Date Objekt geht es ja auch (wenn ich es um eigene Methoden erweitern will):
    // Beispiel:
    Date.prototype.addDays = function ()
    {
    };

    var date = new Date();
    date.addDays();

    Die Frage ist jetzt nur: wie komme ich an die Konstrukturen von den Selectboxen dran??

    Selectbox.prototype.selectedValue = function () {this.options[this.selectedIndex].value;
    }

    Selectbox.selectedValue();

    Schon versucht?

  2. Hi,

    Allen Selectboxen möchte ich die Property selectedValue verpassen, die mir genau oben das zurückgibt.

    meinetwegen auch als Methode.

    das solltest Du tun, den ansonsten müsstest Du einen Getter bauen ...

    Selectbox.prototype.selectedValue = this.options[this.selectedIndex].value;

    ... anstatt ihm den in diesem Moment vorliegenden Wert von window.options[window.selectedIndex] zuzuweisen - oder was immer 'this' im Kontext der Zuweisung ist.

    Die Frage ist jetzt nur: wie komme ich an die Konstrukturen von den Selectboxen dran??

    Exakt so wie bei Date-Objekten, nur dass es ein HTMLSelectElement-Objet ist. Es gibt dann nur noch das klitzekleine Problemchen, dass Du am IE scheitern wirst, sofern Dir keine Zeitmaschine zur Verfügung steht.

    Das wäre fast schon zu schön, dann könnte ich ja zB. auch das Event Objekt standardisieren:

    Ja, kannst Du. Außer im IE, versteht sich, der wie so oft zu blöd zum Kacken ist.

    Event.prototype.target = (this.target) ? this.target : this.srcElement;

    Es ist bei derlei Dingen allerdings zumeist wenig sinnvoll, eine Konstante zu erzeugen.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      Exakt so wie bei Date-Objekten, nur dass es ein HTMLSelectElement-Objet ist. Es gibt dann nur noch das klitzekleine Problemchen, dass Du am IE scheitern wirst, sofern Dir keine Zeitmaschine zur Verfügung steht.

      cool klappt... Gibts da keine Workarounds für den IE?? muss auch erst ab IE 6 klappen... Irgendwas mit ActiveX?

      Gruß
      Christian

      1. Hi,

        Gibts da keine Workarounds für den IE??

        mir sind keine bekannt. Der IE ist und bleibt eine Spaß- und Technikbremse.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  3. hallo again Christian S.

    ...
    selectbox.options[selectbox.selectedIndex].value zu.

    Das ist mir langsam zu lästig und ich frage mich ob dies auch einfacher geht.
    ...
    Selectbox.prototype.selectedValue = this.options[this.selectedIndex].value;
    ...

    wenn schon, dann doch eher so:

    HTMLSelectElement.prototype ...

    ... gecko-engines sind aber die einzigen, die Dir diesen ansatz auch fuer das
       DOM ermoeglichen.

    gerade in diesem fall muss man JavaScript und DOM scharf trennen (eigentlich
       sollte man das immer). die ECMAScript-spezifikation, die als richtlinie fuer
       JavaScript-implementierungen herangezogen werden muss, schreibt prototyping
       nur fuer den sprachkern vor. implementierungen anderer spezifikationen, wie
       z.b. DOM muessen zwar kompatible schnittstellen zur verfuegung stellen, selbst
       aber nicht dem standard des JavaScript-sprachkerns genuegen.

    waehle einen anderen praxisgerechteren ansatz ;-)

    by(t)e by(t)e - peterS. - pseliger@gmx.net

    --
    »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
    Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
    ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]
    1. Hallo,

      HTMLSelectElement.prototype ...

      ... gecko-engines sind aber die einzigen, die Dir diesen ansatz auch fuer das
         DOM ermoeglichen.

      Glaub ich nicht. Gerade erfolgreich mit Presto getestet.

      Viele Grüße

      1. gruss Nerog,

        Glaub ich nicht. Gerade erfolgreich mit Presto getestet.

        ja ok, tut mir leid, dass ich opera unterschlagen habe -
           der kann das seit version 8 (oder sogar schon 7?) auch.

        so long - peterS.

        --
        »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
        Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
        ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]