hi Tobias,
das geht total in die hose:
var objectFct, prototypeFct;
for (methodName in obj)
{
if ((typeof obj[methodName] == "function"))
{
if(!obj.constructor.prototype[methodName])
{
objMethodStr = obj[methodName].toString();
----------^^^^^^^^^^^^
dies ist ein string ...
obj.constructor.prototype[methodName] = function(text)
{
objMethodStr();
------------------------^^
..., den Du sicherlich nicht als funktion aufrufen kannst;
};
}prototypeFct = obj.constructor.prototype[methodName];
hier weist Du "prototypeFct" die gerade gemachte fehlerbehaftete
aenderung zu;
obj[methodName] = function()
{
// ?? oder --> obj.constructor.prototype[methodName] = function() { ... }
schon wieder eine aenderung der prototypen-methode??
prototypeFct();
alert("---> saved!");
alert("screwed up")
};
}
}
ok.:
JavaScript ist objektorientiert und entzieht sich den zwaengen
der klassenbasierten vererbung indem es sich des prototypen-
konzepts bedient (pro und kontra sollen hier nicht diskutiert
werden - in dieser sprache ist das so, und in anbetracht ihrer
einsatzgebiete ist deren leichtfuessigkeit und offenheit auch
voellig in ordnung);
die zu jedem objekt gehoerende eigenschaft "prototype" referen-
ziert ein objekt dessen eigenschaften immer auch eigenschaften
desjenigen objektes sind, welches diesen prototypen besitzt,
solange dieses objekt nicht ueber eigene gleichbenannte eigen-
schaften verfuegt;
umgangssprachlich bedeutet das:
beim aufruf einer objekt-eigenschaft, wird zuerst das objekt
nach dieser durchsucht - gibt es eine soche eigenschaft nicht,
wird dessen "prototype"-objekt abgeklappert - ist auch diese
suche erfolglos wird dessen "prototype"-objekt herangezogen usw.
... recht schnell landet man dann beim globalen objekt "Object";
diese vererbungskette nennt man auch "prototype chain";
da es sich bei der eigenschaft "prototype" wie bei allem in
JavaScript um ein objekt handelt, kann diese natuerlich fuer
jedes objekt zu jeder zeit manipuliert werden;
by(t)e by(t)e - peterS. - pseliger@gmx.net
br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)