Это в основном сокращенное присвоение нескольких переменных одному значению в одной строке.
Это немного сбивает с толку, потому что мы имеем дело со ссылками.
var foo = {n:2}
- foo - это метка или имя для этого объекта, поэтому мы можем использовать его.
{n:2}
- это объект, с которым мы имеем дело, в этом примере мы назовем его TheObject
, мы можем использовать bar, но для простоты забудем, что bar ссылается на этот объект
var bar = foo;
- это означает, что мы назначаем второе имя тому же объекту.
Пока все ясно, надеюсь, теперь на этой строке:
foo.x = foo = {n: 2};
Что здесь происходит, мы назначаем foo.x и foo новый объект {n:2}
,
мы говорим foo указать на этот новый объект, однако foo.x немного особенный, это не то, на что указывает foo, а TheObject
наш старый объект.
Это потому что это однострочная операция, когда мы сказали foo
это просто метка / имя foo.x
это TheObject.x
Пример OP
var foo = {
n: 1
};
var bar = foo;
foo.x = foo = {
n: 2
};
console.log(foo)
console.log(bar)
Тестовый пример
var foo = {n: 1};
var bar = foo;
// bar references the first object
// we didn't touche bar so we're good to test with it
bar.x = foo = {n: 2};
console.log(foo)
console.log(bar)
извините, если объяснение немного шаткое, слова и мои мысли не так хороши.