Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.02.2017, 16:03
Новичок на форуме
Отправить личное сообщение для macros_kh Посмотреть профиль Найти все сообщения от macros_kh
 
Регистрация: 21.02.2017
Сообщений: 3

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'], а не пустой массив. Объясните пожалуйста логику. И как получать значение вместо ссылки
Ответить с цитированием
  #2 (permalink)  
Старый 21.02.2017, 16:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,129

macros_kh,
get test() {
  	return this._test.slice(0);
  }
Ответить с цитированием
  #3 (permalink)  
Старый 21.02.2017, 16:44
Новичок на форуме
Отправить личное сообщение для macros_kh Посмотреть профиль Найти все сообщения от macros_kh
 
Регистрация: 21.02.2017
Сообщений: 3

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

Последний раз редактировалось macros_kh, 21.02.2017 в 16:57.
Ответить с цитированием
  #4 (permalink)  
Старый 22.02.2017, 10:02
Новичок на форуме
Отправить личное сообщение для macros_kh Посмотреть профиль Найти все сообщения от macros_kh
 
Регистрация: 21.02.2017
Сообщений: 3

допустим, но тогда почему если вместо
tmp.push('qe');
мы напишем
tmp = ['qe'];
то все работает отлично?
Ответить с цитированием
  #5 (permalink)  
Старый 22.02.2017, 10:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,129

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнение <script> При определенном class ilya1099 Javascript под браузер 0 06.11.2016 23:12
Присвоить разные class элементу li, какаие есть способы? aleksandr8i Javascript под браузер 11 12.03.2015 23:46
Знаменитая функция Class учавствует в фреймворке ui2/0 __он_самый__ Оффтопик 3 29.12.2014 13:19
Использование классов в JavaScript devote Ваши сайты и скрипты 70 01.02.2013 17:17
Как работает функция Class godofjavascript Оффтопик 58 17.12.2012 09:49