peterS.: javascript prototype

Beitrag lesen

gruss Tobias,

nun eben die frage:

ist es möglich an den methode source zu kommen wenn sie
im constructor erzeugt wurde.

ja - bsp. folgt:

var Con = function() {
     this.show_1 = function(text) {
       alert("none prototype method "show_1":\n\n" + arguments.callee);
     };
   };
   Con.prototype.show_1 = function(text) {
     alert("prototype method "show_1":\n\n" + arguments.callee);
   };
   Con.prototype.show_2 = function(text) {
     alert("prototype method "show_2":\n\n" + arguments.callee);
   };

var obj = new Con();

obj.show_1();
   obj.show_2();

var methodName, objMethodStr, prototypeStr;

for (methodName in obj) {
     if ((typeof obj[methodName] == "function") && (typeof obj.constructor.prototype[methodName] == "function")) {
       objMethodStr = obj[methodName].toString();
       prototypeStr = obj.constructor.prototype[methodName].toString();
       if (objMethodStr == prototypeStr) { // objekt-methode entspricht der prototypen-methode;
         alert(""" + methodName + "" is a prototype method:\n\n" + objMethodStr);
       } else { // die ueber den prototypen ererbte methode wurde auf dem objekt ueberschrieben;
         alert(""" + methodName + "" is an overwritten prototype method:\n\n" + objMethodStr + "\n\ncode of the original prototype:\n\n" + prototypeStr);
       }
     }
   }

das folgende bsp. greift Deiner naechsten frage vor, indem es auf
   einfache weise zwei schon vorhandene funktionen gleichen namens
   in  eine neue gleichlautende funktion ueberfuehrt - das fuer Dich
   wichtige parsen von argumenten konnte ich wegen des zeitdrucks
   noch nicht beruecksichtigen - ich bin aber dran, und ein zweiter
   antwortteil kommt irgendwann morgen:

var objectFct, prototypeFct;

for (methodName in obj) {
     if ((typeof obj[methodName] == "function") && (typeof obj.constructor.prototype[methodName] == "function")) {
       objMethodStr = obj[methodName].toString();
       prototypeStr = obj.constructor.prototype[methodName].toString();
       if (objMethodStr != prototypeStr) { /*
         die ueber den prototypen ererbte methode sowie die
         ueberschreibende methode werden zusammen in eine
         neue methode gepackt; */
         objectFct = obj[methodName];
         prototypeFct = obj.constructor.prototype[methodName];
         obj[methodName] = function() {
           prototypeFct();
           objectFct();
         };
         alert("merge of object function "" + methodName + "" and of prototype method "" + methodName + ""\n\n" + obj[methodName]);
         objmethodName; // aufruf des neuen vereinigten funktionsobjektes gleichen namens;
       }
     }
   }

beschaeftige Dich doch bis dahin noch einmal mit
   dem prototypischen vererbungskonzept in javascript
   sowie mit den objekteigenschaften "constructor" und
   "prototype";

bis spaeter - peterS. - pseliger@gmx.net

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