Cách chính xác để xác định loại lớp tờ rơi?


8

Cách tiếp cận đúng (hoặc được khuyến nghị) để xác định "loại" lớp trong Tờ rơi / Javascript là gì?

Tôi có thể sử dụng thành công layer instanceof, nhưng nó chỉ hoạt động khi bạn biết loại tại thời điểm thiết kế (mà tôi mong đợi thường là trường hợp).

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

Có một cách tiếp cận khác tôi nên sử dụng?

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

Câu trả lời:


2

Đây thực sự không phải là vấn đề của Tờ rơi, mà là vấn đề chung với Javascript. Và nó đặc biệt quan tâm khi bạn muốn tên của các đối tượng. Để so sánh, có rất nhiều cách để làm điều đó một cách an toàn (như trong ví dụ của bạn).

Javascript không có lớp, vì vậy bạn chỉ có thể thực sự dựa vào

layer.constructor.name

Tuy nhiên, nếu bạn sử dụng mã được rút gọn, tên của hàm tạo thường thay đổi (vì chúng cũng được rút gọn), vì vậy chúng sẽ không dễ đọc.

Một số lib thêm tên đối tượng làm thuộc tính (Leaflet không), nhưng bạn hiếm khi cần chúng dưới dạng văn bản.

Xem https://stackoverflow.com/a/1249554 để thảo luận chi tiết hơn.

Lưu ý rằng bạn không bao giờ nên sử dụng các tên này cho bất kỳ điều gì trong mã của bạn (so sánh / nhận dạng) ngoại trừ đầu ra thẳng (gỡ lỗi), vì chúng không đáng tin cậy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.