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?