Javascript.RU

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

Непонятное поведение массива как свойства класса.
Всем доброго дня. Мне не понятен результат выполнения следующего кода.

var SomeClass = function(){};

SomeClass.prototype = {

        someArr: new Array(),

        operateArr:function(){

              this.someArr[this.someArr.length] = 53;

        }

};

var o = new SomeClass();
o.operateArr();
console.log(o.someArr); // [53]
o = new SomeClass();
o.operateArr();
console.log(o.someArr); // [53, 53]
o = new SomeClass();
o.operateArr();
console.log(o.someArr); // [53, 53, 53]


Разве не должен массив обнуляться при создании нового объекта?
Ответить с цитированием
  #2 (permalink)  
Старый 24.06.2015, 08:28
Аспирант
Отправить личное сообщение для Endy Посмотреть профиль Найти все сообщения от Endy
 
Регистрация: 15.05.2015
Сообщений: 41

Сообщение от vamfirius
Разве не должен массив обнуляться при создании нового объекта?
нет не должен,потому что он общий для всех объектов,т.к изменяется в прототипе.

Исправление:
var SomeClass = function () {
*!*
    this.someArr = [];
*/!*

};

SomeClass.prototype = {

    operateArr: function () {

        this.someArr[this.someArr.length] = 53;

    }

};

var o = new SomeClass();
o.operateArr();
console.log(o.someArr); // [53]
o = new SomeClass();
o.operateArr();
console.log(o.someArr); // [53]
o = new SomeClass();
o.operateArr();
console.log(o.someArr); // [53]
Ответить с цитированием
  #3 (permalink)  
Старый 24.06.2015, 09:31
Интересующийся
Отправить личное сообщение для vamfirius Посмотреть профиль Найти все сообщения от vamfirius
 
Регистрация: 01.07.2010
Сообщений: 29

Хм, но если в прототипе будет не массив а другие переменные(пробовал со строками и числами), то они будут вести себя так как я предполагал, т.е. будут перезаписываться для каждого нового объекта. В чем разница между массивами и числовыми переменными в данном случае?
var SomeClass = function(){};

SomeClass.prototype = {

      someVar: 25,

      operateVar:function(){

            this.someVar++;

      }

};

var o = new SomeClass();

o.operateVar();
console.log(o.someVar); // 26
o = new SomeClass();
o.operateVar();
console.log(o.someVar); // 26
o = new SomeClass();
o.operateVar();
console.log(o.someVar); // 26
Ответить с цитированием
  #4 (permalink)  
Старый 24.06.2015, 09:43
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от vamfirius
Хм, но если в прототипе будет не массив а другие переменные(пробовал со строками и числами), то они будут вести себя так как я предполагал, т.е. будут перезаписываться для каждого нового объекта. В чем разница между массивами и числовыми переменными в данном случае?
https://learn.javascript.ru/object-reference
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #5 (permalink)  
Старый 24.06.2015, 09:54
Интересующийся
Отправить личное сообщение для vamfirius Посмотреть профиль Найти все сообщения от vamfirius
 
Регистрация: 01.07.2010
Сообщений: 29

Так там же new Array(), а не newArray = oldArray. При присваивании понятное дело передается ссылка, а при создании нового объекта поидее должен создаваться пустой массив. Я не прав?
Ответить с цитированием
  #6 (permalink)  
Старый 24.06.2015, 10:08
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

vamfirius,
new Array() - срабатывает единожды при СОЗДАНИИ ПРОТОТИПА, а далее при создании экземпляра класса - экземпляр получает ссылку на свой прототип, и ,соответственно, ссылку на УЖЕ СОЗДАННЫЙ массив.
Ответить с цитированием
  #7 (permalink)  
Старый 24.06.2015, 10:31
Интересующийся
Отправить личное сообщение для vamfirius Посмотреть профиль Найти все сообщения от vamfirius
 
Регистрация: 01.07.2010
Сообщений: 29

tsigel,
Понял, спасибо. Всем кто отписался выше тоже спс. Плюсанул карму.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение значения свойства из класса. Duda.Ml1986@gmail.com Серверные языки и технологии 4 30.07.2013 05:22
Подскажите как достать значение из асс. массива posta Серверные языки и технологии 7 25.11.2012 00:38
Как удалить элемент массива? velo Общие вопросы Javascript 2 05.02.2010 15:58
Как сформировать строку из массива di@mond Я не знаю javascript 9 11.06.2009 17:35
Можно ли как для произвольного массива создавать вызовы функций , имеющих на входе kefi Общие вопросы Javascript 3 17.04.2009 16:53