[OpenLayers-Dev] 2.10 and 2.11-RC1 OpenLayers.Class behavior changes

Eric Lemoine eric.lemoine at camptocamp.com
Mon Aug 8 01:34:21 EDT 2011

> Hi Eric,

Hi Didier

I have added tests for your usage patterns. See

> With your proposed patch, I am very happy (for the moment, my tests are
> working, but I still have some issues --surely be related to 2.10 to 2.11
> port in our Geoportal's API--).
> If your patch is included in 2.11, it would be great.

I think it'd be safe to include it. Here's the ticket:
<http://trac.osgeo.org/openlayers/ticket/3454>. The patch is attached
to it.

But I'd like to bring something to your attention: my patch works
because the constructor passed to "overload" (which I renamed
"overwrite" in the tests) and the constructor returned by "overload"
share the same prototype object (See code below). And what's important
to know if that a closure is created in OpenLayers.Class when defining
the constructor function, this closure will prevent the garbage
collector from reclaiming the memory associated to constructors
overwritten by the "overload" function. I don't think that's a big
deal if you don't overwrite too many OpenLayers constructors in the
GeoPortal library.

    function test_overwrite_5(t) {
        // overwrite constructor of parent class, which itself
        // doesn't defined "initialize"
        var A = OpenLayers.Class({
            initialize: function() {
                this.a = "foo";
        var B = OpenLayers.Class(A, {});
        var _A = A;
        A = overwrite(A, {
            initialize: function() {
                this.a = "bar";
        var b = new B;
        t.ok(A.prototype === _A.prototype, "A and _A share the prototype");
        t.eq(b.a, "bar", "ctor overwritten");

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.lemoine at camptocamp.com

More information about the Dev mailing list