У меня есть JavaScript / ES6 class
с членом, который является массивом с именем x
, инициализированным [1,2,3,4]
.
Когда я объявляю новую переменную в методе с именем y
, присваиваю ей x
, а затем изменяю значения в x
, y
остается неизменным, указывая, что y
является копией x
.
Если я объявил и присвоил y
переменной с именем z
в том же методе, изменение z
изменит y
, но не изменит x
.
Это будет означать, что объявление массива уровня класса (объекта?) И последующее присвоение его переменной внутри метода копирует объект.Это значительно отличается от языков, таких как C #.
Почему это реализовано в JavaScript / ES6?
class Alpha {
constructor() {
this.x = [1, 2, 3, 4];
}
DoSomething() {
console.log('x is ' + this.x); // x is 1,2,3,4
let y = this.x;
this.x = [99, 99, 99, 99];
console.log('x is ' + this.x); // x is 99,99,99,99
console.log('y is ' + y); // y is 1,2,3,4 (?)
let z = y;
z[1] = 888;
console.log('x is ' + this.x); // x is 99,99,99,99
console.log('y is ' + y); // y is 1,888,3,4
console.log('z is ' + z); // z is 1,888,3,4
}
}
let thing = new Alpha();
thing.DoSomething()