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

时间:2016-05-06 14:49:52

标签: javascript datamaps

似乎用这段代码:

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之后,生成的数据图是Conf 1Conf 2的混合。 怎么会发生这种情况?

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

1 个答案:

答案 0 :(得分:1)

问题是由于defaults的数据图实现。

在代码行中:

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来修复它。