Два массива не ссылаются друг на друга. Фактически, ни один из этих массивов больше не существует, как только вы создали o
. Вы просто создаете их, получаете ссылку на их push
и join
методы, а затем выбрасываете массивы. Эти методы не имеют обратной связи с массивами, из которых вы их получили.
Причина, по которой вы видите то, что вы видите, в том, что push
использует o
, а не массивы, из которых вы получили методы. (push
работает просто отлично, если вы вызываете его для не-массива; большинство методов массива делают).
Вот более простая ситуация, демонстрирующая ту же концепцию:
var obj1 = {
setValue: function(value) {
this.value = value;
}
};
var obj2 = {
setValue: obj1.setValue,
showValue: function() {
console.log(this.value);
}
};
obj2.setValue(42);
obj2.showValue(); // 42
setValue
устанавливает значение на obj2
, а не obj1
, потому что оно называлось obj2.setValue(42)
.
Подробнее: