2016-05-06 7 views
1

間のメモリの共有状態を維持する:第割り当てmap得られたデータマップ後新しいデータマップ()はこのコードでと思わ呼び出し

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

Conf 1Conf 2の混合物です。 これはどのように起こる可能性がありますか?ここで

はライブデモです:https://jsfiddle.net/mztyLh66/7/

答えて

1

問題はdefaultsのデータマップの実装によるものでした。コードの行で

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

obj[prop]これはnew Datamap()の異なるインスタンス間でのメモリの共有状態を引き起こし、source[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])); 
    } 
} 

をし、それを修正するpull requestを開きました。

関連する問題