peterS.: javascript prototype

Beitrag lesen

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