Javascript new Datamap()在调用之间保持内存的共享状态
似乎有了这个代码:Javascript new Datamap()在调用之间保持内存的共享状态,javascript,datamaps,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 1和Conf 2的混合体。 这怎么会发生 这里是一个实时演示:问题是由
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 1
和Conf 2
的混合体。
这怎么会发生
这里是一个实时演示:问题是由于的Datamap实现造成的 在代码行中:
if (obj[prop] == null) obj[prop] = source[prop];
obj[prop]
是指向源[prop]
的指针,这会导致新数据映射()的不同实例之间共享内存状态
我已使用深度副本解决了此问题:
// 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]));
}
}
并打开一个窗口来修复它