Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.07.2013, 04:31
Аватар для pikko
Аспирант
Отправить личное сообщение для pikko Посмотреть профиль Найти все сообщения от pikko
 
Регистрация: 06.10.2012
Сообщений: 60

Прототипное наследование. Лохотрон.
// представьте что у вас есть некий объект:
var a = {
    w : ['a', 'h', 't', ' ', 't', 'h', 'e'],
    f : [
            {  u : 'c',
                k : '?'
            }
        ]
};

// и вам надо произвести какие-то страшные манипуляции с его данными,
// при этом не повредив его, потому что, допустим, он очень дорог вам,
// и вы любите его всей душой.

// Вы делаете потомка, с которым не страшно делать все что угодно:
var b = Object.create(a);

// и делаете свои грязные делишки:
b.w.splice(0, b.w.length);
delete b.f[0].u;
delete b.f[0].k;

// вопрос — что теперь с вашим любимым 'a' ?
alert(JSON.stringify(a, null, 4));


Я понимаю что происходит и почему, но ведь это же НЕПРАВИЛЬНО! Какое же это наследование?

Последний раз редактировалось pikko, 12.07.2013 в 04:46.
Ответить с цитированием
  #2 (permalink)  
Старый 12.07.2013, 04:50
Профессор
Отправить личное сообщение для mta88 Посмотреть профиль Найти все сообщения от mta88
 
Регистрация: 16.05.2013
Сообщений: 229

Сообщение от pikko Посмотреть сообщение
Я понимаю что происходит и почему, но ведь это же НЕПРАВИЛЬНО! Какое же это наследование?
да ладно, вы не единственный, кто находил недостатки в javascript, как и в любом другом языке
в том и мастерство программиста, чтобы обходить недостатки и пользоваться достоинствами
например в данном случае можно поискать библиотеку для эмуляции "классического" наследования
ну или можно найти другой язык или вообще все бросить
Ответить с цитированием
  #3 (permalink)  
Старый 12.07.2013, 05:12
Аватар для pikko
Аспирант
Отправить личное сообщение для pikko Посмотреть профиль Найти все сообщения от pikko
 
Регистрация: 06.10.2012
Сообщений: 60

Сообщение от mta88 Посмотреть сообщение
библиотеку для эмуляции "классического" наследования
сколько библиотек ни подключи, а в JavaScript нет другого наследования кроме прототипного. В данном случае поможет только полное копирование объекта, это несколько строчек, и нет смысла ради этого что-то подключать.

И вообще, я ж не жалуюсь, я просто предупредить, может кто не знает. Такое поведение совсем не интуитивно, и я долго искал где ошбся, прежде чем понял, что ошибся, вроде как, и не я =)
Ответить с цитированием
  #4 (permalink)  
Старый 12.07.2013, 09:21
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Так это не бага, а фича!
Если фича не нужна, юзаем Object.freeze()
Ответить с цитированием
  #5 (permalink)  
Старый 12.07.2013, 11:46
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от danik.js
Так это не бага, а фича!
вообще то, да. Кроме того, ежу ясно, что объекты передаются по ссылке, это нормально. Делайте копию объекта и будет вам счастье или делайте методы для работы с этим объектом.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прототипное наследование не распространяется на вложенные свойства? novikov Общие вопросы Javascript 4 19.11.2012 14:31
Прототипное наследование bFree Общие вопросы Javascript 2 18.09.2012 11:20
Наследование от встроенного Error khusamov Общие вопросы Javascript 8 01.02.2012 13:32
Наследование класса-замыкания и вызов метода предка BobiKK Общие вопросы Javascript 2 21.03.2010 13:26
Лохотрон или способ подзаработать? greatilya Оффтопик 14 07.05.2009 06:30