On Friday, April 4, 2003, at 07:03 AM, Raymond Irving wrote:
Hi,
I've been thinking about creating an easier way to
subclass/overwrite methods:
DynObject.prototype.subclass = function(n,fn){
if(!this._sbCls) this._sbCls=1;
var om = '_sbMethod'+(this._sbCls++); // old method
eval('fn='+(fn+'').replace(/\~subclass\(/g,'this.'+om+'('));
this[om]=this[n];
this[n]=fn;
};
Usage:
MyWidget.prototype.subclass('setSize',function(w,h){
~subclass(w,h); // call old setSize method;
// some code here
});
The above would subclass setSize() with the new
function. The ~subclass() function will allow you to
call the old/orginal setSize() function
I would prefer
I prefer the syntax super.setSize(w,h).
What about adding
DynAPIObject.prototype.overwrite = function(sC,n) {
var c = this.frame[sC];
var superMethod = c.prototype._superPrototype[n];
var capitalized = n.charAt(0).toUpperCase() + n.substring(1,n.length);
var superMethodOverridename = 'super'+ capitalized;
if(superMethod && !c.prototype[superMethodOverridename]) {
c.prototype[superMethodOverridename] = superMethod;
}
};
and in the class you want to overwrite:
p.setSize = function(width,height) {
this.superSetSize (widt h,height);
//Then do your stuff
}
dynapi.overwrite(');//which basically does p.superSetSize = mySuperClass.prototype.setSize
that way it's in the same fashin as the setPrototype() ?
It's "clean" in the sense that it's important to overrides only the implementation defined is in your super class, guaranteeing a correct overriding if different subclasses overrides the same method multiple time. In javascript, it's easy to directly get the implementation of an of your ascendant, and bypass some !
Benoit
It's similar to:We should use overwrite, it's the appropriate term in OO terminology when a subclass modify an inherited method.
MyWidget.prototype._oldSetSize =
DynLayer.prototype.setSize;
MyWidget.prototype.setSize =
function('setSize',function(w,h){
this.oldSetSize(w,h); // call old setSize method;
// some code here
});
Is the term "subclass" correct or should we term it as
"overwrite"?
Benoit
Any comments?
--
Raymond Irving
__________________________________________________
Do you Yahoo!?
Yahoo! Tax Center - File online, calculators, forms, and more
http://tax.yahoo.com
-------------------------------------------------------
This SF.net email is sponsored by: ValueWeb:
Dedicated Hosting for just $79/mo with 500 GB of bandwidth!
No other company gives more support or power for your dedicated server
http://click.atdmt.com/AFF/go/sdnxxaff00300020aff/direct/01/
_______________________________________________
Dynapi-Dev mailing list
[EMAIL PROTECTED]
http://www.mail-archive.com/[EMAIL PROTECTED]/