Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ECMA 6 Class proprty (https://javascript.ru/forum/misc/67508-ecma-6-class-proprty.html)

macros_kh 21.02.2017 16:03

ECMA 6 Class proprty
 
Доброго времени суток, ни как не могу понять что с классами не так. Есть класс, есть свойство, которое почему-то работает как указатель, вобщем вот код
class A {
	constructor() {
  	this._test = [];
  }
  
  get test() {
  	return this._test;
  }
  
  method() {
  	let tmp = this._test;
  	tmp.push('qe');
    this._test = ['tmp'];
    
  	return true;
  }
}

let a = new A();
let b = a.test;
a.method();
console.log(b);


Результат будет ['qe'], а не пустой массив. Объясните пожалуйста логику. И как получать значение вместо ссылки

рони 21.02.2017 16:29

macros_kh,
get test() {
  	return this._test.slice(0);
  }

macros_kh 21.02.2017 16:44

спасибо, осталось понять логику, т.к. если использовать присваивание вместо push, то такого эффекта не возникает

macros_kh 22.02.2017 10:02

допустим, но тогда почему если вместо
tmp.push('qe');
мы напишем
tmp = ['qe'];
то все работает отлично?

рони 22.02.2017 10:10

macros_kh,
указатель tmp перевели с одного обьекта на другой
в b остался прежний обьект, в tmp второй обьект, а в this._test уже третий обьект.


Часовой пояс GMT +3, время: 00:13.