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 1
和 Conf 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 来修复它。
似乎用这段代码:
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 1
和 Conf 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 来修复它。