From: Raymond I. <xw...@ya...> - 2003-04-06 03:31:13
|
--- Benoit Marchant <mar...@ma...> wrote: > > function MyClass2(){} > > var p= dynapi.setPrototype('MyClass2','MyClass1'); > > dynapi.overwrite('MyClass2','setSize'); > > p.setSize=function(w,h){ > > this.superSetSize(w,h); > > // will the above superSetSize be DynLayer's or > > MyClass1 setSize function? > The above will call MyClass1.prototype.setSize > > // If it's MyClass1 then how will the MyClass1 > code > > access DynLayer's setSize()? > Because the overwrite method creates > MyClass1.prototype.superSetSize = > DynLayer .prototype.superSetSize I'll have to run some more test on this one. > > Also, how will it work with multiple extensions? > > > It doesn't ! There's the exact same problem with > categories in > Objective-C. If you define the same method (even for > new method that > didn't exists) on a class in 2 different source > files, depending on the > loading mechanism, either the first or the last > would win. > There's no way to determine an order between the > multiple definitions, > and even if there were an order, at best you want to > control which one > wins, but defining any combining of the different > implementations looks > risky to me. > So bottom line we should decide which one wins, and > stick with that. > In the implementation I did, the first one win as I > check if the > superSetSize exists, and if it does, then subsequent > use overwrite > would have no effects. > If we don't check, then the last call win. I guess, > if you provide a > extension it would be called after and you would > expect it to win. > > This overwrite use is meant for overriding method in > subclasses. Now if > you want to re define setSize on DynLayer with your > custom > implementation, and then have all subclasses that > inherit from DynLayer > and override setSize to use your new implementation, > you really have to > assign DynLayer.prototype.setSize = myNewSetSize > > And all should be as expected. But that usage could > be described as a > "hack". The same can be done in the Objective-C > run-time, but I've only > done it once. This usage should be pretty rare, and > therefore you can > do it manually I think. > > Make sense ? Current we are able to support multiple extension that can overwrite a class function multiple times without having to worry about who comes fies or last. If we start allowing users to use overwrite() then they will just use it and expect it to work the same way they can currently do overwrites. We'll have to come up with a solution that supports multiple overwrites of the same class function. -- Raymond Irving > Benoit > __________________________________________________ Do you Yahoo!? Yahoo! Tax Center - File online, calculators, forms, and more http://tax.yahoo.com |