hallo again Tobias,
im zweiten teil knuepfe ich nahtlos an das letzte bsp. an,
in dem die zwei gleichlautenden methoden in eine neue funktion
gleichen namens gepackt wurden, wobei diesmal die fuer beide
funktionen identischen argumente beruecksichtigt werden;
dies geschieht relativ simpel ueber die jeder funktion zueigene
methode "apply", so dass auf ein parsen der funktions-strings
verzichtet werden kann;
der von mir gewaehlte ansatz, zwei bekannte funktionen in einen
neuen funktions-container zu verpacken, versagt natuerlich erst-
einmal in dem moment, wo funktionen werte zurueckgeben - dafuer
muesste man dem folgenden bsp. noch ein paar kleine erweiterungen
angedeihen lassen;
da ich aber nicht wirklich weiss, was Dir so vorschwebt, und ich
deshalb auch aus bequemlichkeit den ansatz ueber "apply" jedem
anderen, mit komplizierten regulaeren ausdruecken arbeitenden,
vorziehe, musst Du mit folgender loesung vorlieb nehmen:
var Con = function() {
this.show_1 = function(text) {
alert("none prototype method "show_1(text)":\n\ntext: "" + text + """);
};
};
Con.prototype.show_1 = function(text) {
alert("prototype method "show_1(text)":\n\ntext: "" + text + """);
};
Con.prototype.show_2 = function(text) {
alert("prototype method "show_2(text)":\n\ntext: "" + text + """);
};
var obj = new Con();
obj.show_1("proof of show_1");
obj.show_2("proof of show_2");
var methodName, objMethodStr, prototypeStr, 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 - argumente(n-namen) werden
beruecksichtigt; */
objectFct = obj[methodName];
prototypeFct = obj.constructor.prototype[methodName];
obj[methodName] = function() {
prototypeFct.apply(null,arguments);
objectFct.apply(null,arguments);
};
alert("merge of object function "" + methodName + "" and of prototype method "" + methodName + ""\n\n" + obj[methodName]);
obj[methodName]("proof of merge"); // aufruf des neuen vereinigten funktionsobjektes gleichen namens;
}
}
}
die von mir ungepruefte erweiterung fuer "return"-werte
koennte so aussehen:
var ..., ..., returnObj = {};
...
obj[methodName] = function() {
returnObj.protoFctValue = prototypeFct.apply(null,arguments);
returnObj.objectFctValue = objectFct.apply(null,arguments);
if ((typeof returnObj.protoFctValue != "undefined") || (typeof returnObj.objectFctValue != "undefined")) {
return returnObj;
}
};
...
so long - peterS. - pseliger@gmx.net
br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)