1

It seems that with this code:

var map = null;
map = new Datamap({
    // Conf 1 ...
});
// Draw map on DOM
// Remove map from DOM and recreate another map
map = null;
map = new Datamap({
    // Conf 2 ...
});

after the second assignment map and the resulting Datamap is a mixture of Conf 1 and Conf 2. How this could happen?

Here is a live demo: https://jsfiddle.net/mztyLh66/7/

4

1 回答 1

1

The problem was due to Datamap implementation of defaults.

In the line of code:

if (obj[prop] == null) obj[prop] = source[prop];

obj[prop] is a pointer to source[prop], this cause a shared state of memory between different instances of new Datamap().

I've addressed the problem using a deep copy:

// Deep copy if property not set
if (obj[prop] == null) {
    if (typeof source[prop] == 'function') {
        obj[prop] = source[prop].bind({});
    }
    else {
        obj[prop] = JSON.parse(JSON.stringify(source[prop]));
    }
}

and opened a pull request to fix it.

于 2016-05-09T12:18:16.753 回答