On Sun, Aug 7, 2011 at 12:01 AM, Eric Lemoine <eric.lemo...@camptocamp.com> wrote: > On Sat, Aug 6, 2011 at 9:32 PM, RICHARD Didier <didier.rich...@ign.fr> wrote: >> >>> >>>>>>> 2/ in test 4, if you remove the initialize function from B and >>>>>>> overload >>>>>>> A, >>>>>>> the B constructor is still the previous A's constructor. >>>>>> >>>>>> Yes. To address this one I see no other solution than patching >>>>>> OpenLayers.Class. See the patch attached to this email, and my >>>>>> test_overload_5 test function. The Class.html tests continue to pass >>>>>> with my patch. >>>>>> >>>>> >>>>> this works in OL 2.11, not in OL 2.10 for me !-( >>>>> I guess there is something similar to do in OL 2.10 ? >>>> >>>> Your initial mail was about OpenLayers trunk/2.11 introducing >>>> regressions. Now the failing test that remains is OL 2.10-only, so OL >>>> trunk/2.11 works better than OL 2.10 for you. Yippee! :-) >>>> >>> >>> My initial mail was really about regression between 2.10 and 2.11 !-) >>> >>>> (Not sure it is worth "fixing" OL 2.10 for that.) >>>> >>> >>> Well, one of my test is versus the current release (2.10) and I am sure >>> there are users that will migrate slower than us (I mean OL and IGNF) ... >>> >>> I do think it is worth fixing it ... at least to prove there is no >>> regression !-D >>> >> >> I've got somethinf working, hence ugly :-) >> >> OpenLayers.overload= function(P,F) { >> var pProtoInitialize= typeof(F.initialize)=="function"? >> P.prototype.initialize >> : null; >> OpenLayers.Util.extend(P.prototype, F); >> if (pProtoInitialize!==null) { >> // override sub-class having same constructor: >> for (var pn in P) { >> if (typeof(P[pn])=='function' && >> P[pn].prototype.initialize===pProtoInitialize) { >> var f= {}; >> eval('f= {"initialize":'+F.initialize.toString()+'}'); >> P[pn]= OpenLayers.overload(P[pn],f); >> } >> } >> } >> >> return P; >> }; > > Hi Didier. Just to say that I personally wouldn't rely on an overload > function that assumes subclasses use their parent constructors as > their namespaces.
I can't imagine a clean/correct implementation of your "overload" function that would make test_overload_5 pass with 2.10. If we apply the OL patch that I've proposed we can address this test case in 2.11 (or 2.12). I still don't understand if that would be ok for you. function test_overload_5(t) { // overload constructor of parent class t.plan(1); var A = OpenLayers.Class({ initialize: function() { this.a = "foo"; } }); var B = OpenLayers.Class(A, {}); A = overload(A, { initialize: function() { this.a = "bar"; } }); var b = new B; t.eq(b.a, "bar", "ctor overloaded"); } -- Eric Lemoine Camptocamp France SAS Savoie Technolac, BP 352 73377 Le Bourget du Lac, Cedex Tel : 00 33 4 79 44 44 96 Mail : eric.lemo...@camptocamp.com http://www.camptocamp.com _______________________________________________ Dev mailing list d...@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/openlayers-dev