peterS.: javascript prototype

Beitrag lesen

gruss Tobias,

Wie überschreibt man in javascript methoden die nicht mit
prototype sondern im constructor erstellt worden sind?

ausschliesslich am einzelnen objekt;

hier mein script:
...

der anfangsbuchstabe eines konstruktoren-namens darf ohne
   weiteres gross geschrieben werden ;-)

function Con() {[your code]}

function con() {
  this.show_1 = function(text) {
    alert("show 1: "+text);
  };
}
con.prototype.show_2 = function(text) {
  alert("show 2: "+ text);
};

(^--- semikolon hat gefehlt);

// nun show 1 neu schreiben:

definitiv nein - hier wird ueberhaupt das
   erstemal eine funktion "show_1" definiert - warum?:

das in der konstruktorfunktion eine objekt-methode
   "show_1" vereinbart wird, interessiert den javascript-
   interpreter an dieser stelle ueberhaupt nicht, denn
   beim laden eine scripts werden zuersteinmal alle
   functionsdefinitionen (vor)kompiliert;

der interpreter stoesst also das erstemal auf eine
   objektvariable "show_1", die einen funktions-datentyp
   enthaelt und als prototypen-funktion des konstruktors
   "con" angelegt ist;

con.prototype.show_1 = function(text) {
  alert('wie geht das?? ' + text);
};

ok - das ist geklaert;

// nun show 2 neu schreiben:

oder genauer:
   //nun die schon existierende prototypen-funktion "show_2"
   //ueberschreiben;

con.prototype.show_2 = function(text) {
  alert('klar, das geht: ' + text);
};

// neue instance

besser:
   // neues con-objekt

<spitzfindig>
     in javascript gibt es kein klassen-konzept also auch keine
     "instanzen" - in erster linie gibt es objekte;
     funktionen (auch die sind objekte) koennen als konstruktoren
     fuer objekte dienen;
   </spitzfindig>

obj = new con();

mit dem aufruf von "new con()" wird der konstruktor abgearbeitet;

"obj" verfuegt durch den prototypen seines konstruktors dabei
   augenblicklich ueber die zwei methoden "show_1" und "show_2"
   (aus: "con.prototype.show_1" bzw. aus "con.prototype.show_2");

doch schon kaum nachmessbar spaeter wird die ueber den prototypen
   ererbte methode "show_1" durch den konstruktor direkt auf dem objekt
   "obj" ueberschrieben (wegen: "this.show_1") - eine jetzt erneut
   folgende anderung "show_1" als prototyp des konstruktors "con" -
   bsp.: "con.prototype.show_1 = function(text) {[your new code]};" -
   hat keinen einfluss auf das schon existierende objekt "obj", da
   selbiges schon ueber eine eigene eigenschaft "show_2" verfuegt, und
   demzufolge beim zugriff auf ebendiese nicht in der vererbungs-
   hirarchie/"prototype chain" nach einem objekt diesen namens
   ausschau gehalten werden muss;

soll "obj.show_1" jetzt doch einen anderen funktions-datentyp
   enthalten, muss ihm dieser einfach direkt zugewiesen werden:

obj.show_1 = function() {[your new code]};

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

--
br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)