|
From: Benoit M. <mar...@ma...> - 2003-04-04 20:52:24
|
This is a very good idea. See bellow my feedback
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('EventObject','setSize');//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:
>
> 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"?
We should use overwrite, it's the appropriate term in OO terminology
when a subclass modify an inherited method.
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
> Dyn...@li...
> http://www.mail-archive.com/dyn...@li.../
>
|