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