new Datamap() 在调用之间保持共享内存状态

new Datamap() keeps a shared state of memory between invocations

似乎用这段代码:

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 ...
});

在第二次赋值 map 之后,生成的 Datamap 是 Conf 1Conf 2 的混合体。 怎么会这样?

这是一个现场演示:https://jsfiddle.net/mztyLh66/7/

问题是由于 defaults.

的 Datamap 实现引起的

在代码行中:

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

obj[prop] 是指向 source[prop] 的指针,这会导致 new Datamap().

的不同实例之间共享内存状态

我已经使用深拷贝解决了这个问题:

// 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]));
    }
}

并打开一个 pull request 来修复它。