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:)