¿Cuál es la mejor manera de obtener / establecer una propiedad de objetos en profundidad en Javascript?

Es notoriamente molesto obtener una propiedad más profunda de un objeto. Si el padre no existe, obtendrá un error. Por lo tanto, debe dejar de llegar a la propiedad cuando no existe un padre.

La manera despistada de hacer esto es:

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

Cuando necesita obtener una propiedad a menudo, esto no es viable y necesita una función de acceso directo. Primero hice algo como esto:

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

Pero esto es cojo por al menos dos razones: el objeto debe estar en el alcance, y a nadie le gusta usareval().

Entonces tal vez es mejor aplicar el objeto a la función:

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);

Pero de alguna manera todavía no se siente bien.
¿Cómo haces esto? ¿Qué es la mejor práctica?

Establecer una propiedad profunda de los objetos de la cual los padres pueden o no existir es aún más molesto.

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

¿Cómo abordaría esto muy bien?

¿Existen funciones nativas de javascript para esto todavía, ya que esto debe hacerse con frecuencia?

Respuestas a la pregunta(2)

Su respuesta a la pregunta