Richtiger Weg, um den Typ der Faltblattschicht zu bestimmen?


8

Was ist der richtige (oder empfohlene) Ansatz zur Identifizierung eines Layertyps in Leaflet / Javascript?

Ich kann erfolgreich verwenden layer instanceof, aber das funktioniert nur, wenn Sie den Typ zur Entwurfszeit kennen (was normalerweise der Fall ist).

map.eachLayer(function(layer) {
    console.log('_leaflet_id=' + layer._leaflet_id + ' is layer type= '+ getLayerTypeName(layer));

function getLayerTypeName(layer)
{
    if (layer instanceof L.Marker){
        return 'Marker';
    }
    else if (layer instanceof L.Tooltip){
        return 'Tooltip';
    }
    else if (layer instanceof L.esri.DynamicMapLayer){
        return 'DynamicMapLayer';
    }
    else if (layer instanceof L.esri.BasemapLayer){
        return 'BasemapLayer';
    }   
    else if (layer instanceof L.Layer){
        return 'Layer';
    }        
    else
    {
        return 'Unknown';
    }
}

Gibt es einen anderen Ansatz, den ich verwenden sollte?

https://jsfiddle.net/CumminsJP/tb28qwpo/

Antworten:


2

Dies ist nicht wirklich eine Broschüre, sondern eine allgemeine mit Javascript. Und es geht speziell darum, wann Sie den Namen des Objekts möchten. Für Vergleiche gibt es viele Möglichkeiten, dies sicher zu tun (wie in Ihrem Beispiel).

Javascript hat keine Klassen, daher können Sie sich nur wirklich darauf verlassen

layer.constructor.name

Wenn Sie jedoch minimierten Code verwenden, ändern sich die Konstruktornamen häufig (da sie ebenfalls minimiert werden), sodass sie nicht lesbar sind.

Einige Bibliotheken fügen die Objektnamen als Eigenschaften hinzu (Leaflet nicht), aber Sie benötigen sie selten als Text.

Weitere Informationen finden Sie unter https://stackoverflow.com/a/1249554 .

Beachten Sie, dass Sie diese Namen niemals für irgendetwas in Ihrem Code verwenden sollten (Vergleich / Identifizierung), außer für die direkte Ausgabe (Debug), da sie unzuverlässig sind.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.