var obj = {};
obj.prop = obj = {};
Ведь оператор присваивания правосторонний, то есть сначала выполнится:
obj = {};
А потом:
obj.prop = obj;
Но нет, так оно не работает. И не ясно, почему. В одну строчку не хочет работать. В две строчки - без проблем, а в одну - никак.
Ради интереса проверил, может значения переменных замораживаются перед вычислениями, но вроде нет:
var x=1; x=1+(x=x+1); //3
Немного усложним, но результат тот же:
var obj=1; obj.prop = (obj = {}); //опять пустой {}
var obj=1; obj.prop = (e=>obj = {})(); //снова пустой {}
var obj=1; obj.prop = (function(){ obj = {}; return obj })(); //пустой