Jaki jest najlepszy sposób na uzyskanie / ustawienie głębokiej właściwości obiektów w Javascript?

Uzyskanie głębszej właściwości obiektu jest notorycznie denerwujące. Jeśli rodzic nie istnieje, pojawia się błąd. Więc musisz przestać docierać do nieruchomości, gdy rodzic nie istnieje.

Nieświadomym sposobem na to jest:

if (parent.value && parent.value.subvalue && parent.value.subvalue.targetvalue)
    var myVal = parent.value.subvalue.targetvalue;
else
    var myVal = null;

Jeśli często potrzebujesz właściwości, jest to niewykonalne i potrzebujesz funkcji skrótu. Najpierw zrobiłem coś takiego:

function getProp(path) {
    try {
        return eval(path);
    }
    catch (e) {
        return null;
    }
};
// getProp('parent.value.subvalue.targetvalue');

Ale jest to kulawa z co najmniej dwóch powodów: obiekt musi być w zasięgu i nikt nie lubi go używaćeval().

Więc może lepiej zastosować obiekt do funkcji:

function getProp(path, parent) {
    path = path.split('.');

    var val = parent;

    for (var k = 0; k < path.length; k++) {
        var key = path[k];

        try {
            val = val[key];
        }
        catch (e) {
            return null;
        }
    }

    return val;
};
// getProp('value.subvalue.targetvalue', parent);

Ale jakoś nadal nie czuje się dobrze.
Jak Ty to robisz? Jaka jest najlepsza praktyka?

Ustawienie obiektów o głębokiej właściwości, których rodzice mogą lub nie mogą istnieć, jest jeszcze bardziej irytujące.

parent = parent || {};
parent.value = parent.value || {};
parent.value.subvalue = parent.value.subvalue || {};
parent.value.subvalue.target = "YAY SOME VALUE!"

Jak sobie z tym poradzisz?

Czy są jeszcze natywne funkcje javascript, ponieważ trzeba to robić często?

questionAnswers(2)

yourAnswerToTheQuestion