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.../ > |