Das würde ich nicht machen, weil man hier mit Magic Strings arbeiten muss. Wenn sich an den Bezeichnern etwas ändert, muss man diese Strings mit berücksichtigen.
Ja, muss ich halt auch bei properties.
Vorschlag zur Güte:
function lense (target) {
const wrap = () => target;
return new Proxy(wrap, {
get : function (_, property) {
return lense(target instanceof Object ? target[property] : undefined)
},
apply : function() {
return target
}
});
}
lense({foo:{bar:42}}).foo.bar() // 42
lense({foo:{bar:42}}).bar.foo() // undefined
Ist aber derbes Meta-Programming-Gehacksel, vielleicht doch besser nicht so machen.