リーフレットレイヤーのタイプを判断する正しい方法は?


8

リーフレット/ Javascriptでレイヤーの「タイプ」を識別するための正しい(または推奨される)アプローチは何ですか?

私は正常に使用できlayer instanceofますが、これは、設計時にタイプを知っている場合にのみ機能します(通常はそうです)。

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';
    }
}

私が使用すべき別のアプローチはありますか?

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

回答:


2

これは実際にはリーフレットの問題ではありませんが、JavaScriptの一般的な問題です。また、オブジェクトの名前が必要な場合は特に関係があります。比較のために、(例のように)安全に行う方法はたくさんあります。

JavaScriptにはクラスがないので、本当に頼りになるのは

layer.constructor.name

ただし、縮小コードを使用する場合、コンストラクター名は(縮小されているため)変更されることが多いため、判読できません。

一部のライブラリはオブジェクト名をプロパティとして追加します(リーフレットは追加しません)が、テキストとしてそれらを必要とすることはめったにありません。

詳細については、https://stackoverflow.com/a/1249554を参照してください

これらの名前は信頼できないため、ストレート(デバッグ)出力以外のコード(比較/識別)でこれらの名前を使用しないでください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.