2016-05-06 1 views
1

Es scheint, dass mit diesem Code:neue Datamap() hält einen freigegebenen Zustand der Speicher zwischen Invokationen

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

nach der zweiten Zuordnung map und das resultierende Datamap ist eine Mischung aus Conf 1 und Conf 2. Wie könnte das passieren?

Hier ist eine Live-Demo: https://jsfiddle.net/mztyLh66/7/

Antwort

1

Das Problem war wegen Datamap Implementierung von defaults.

Im Codezeile:

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

obj[prop] ist ein Zeiger auf source[prop], verursachen diese einen gemeinsamen Zustand des Speichers zwischen den verschiedenen Instanzen new Datamap().

habe ich mit dem Problem eine tiefe Kopie mit:

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

und öffnete eine pull request es zu beheben.