Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 20.01.2015, 21:51
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

registrant, Ну как бы логично, что объект создаваемый из строки не должен быть равен объекту прародителю, ибо это другой объект, а в JS объекты сравниваются по ссылке.

Разумеется, если нужно, то можно сделать чтобы равнялось, также можно воссоздать дерево прототипов и т.д. JS позволяет всё это сделать, а в ES6 добавили специальный объект Reflect, в котором есть методы для ещё более удобной работы с объектами.
__________________
kobezzza
code monkey
Ответить с цитированием
  #22 (permalink)  
Старый 20.01.2015, 21:54
Аспирант
Посмотреть профиль Найти все сообщения от registrant
 
Регистрация: 15.01.2015
Сообщений: 39

Сообщение от kobezzza
ибо это другой объект
Вот это ключевое слово.
Ответить с цитированием
  #23 (permalink)  
Старый 20.01.2015, 21:59
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от registrant Посмотреть сообщение
Вот это ключевое слово.
Дык он и должен быть другим, мы создаём дамп объекта в виде синтаксиса JS, а потом снова натравливаем VM на полученный код и он возвращает новый объект, похожий на прародитель и это абсолютно нормальное поведение, а такая функция может понадобится, если нам по каким либо причинами не подходит JSON (ну например хотим сохранять функции без гемороя с экранированием).

Ну а если очень нужно (только не понятно зачем), чтобы полученный объект был равен исходному, то можно и это сделать, как говорится: было бы желание.
__________________
kobezzza
code monkey
Ответить с цитированием
  #24 (permalink)  
Старый 20.01.2015, 22:09
Аспирант
Посмотреть профиль Найти все сообщения от registrant
 
Регистрация: 15.01.2015
Сообщений: 39

kobezzza,
Я считаю, что это порочная практика, противоречащая идеологии JS в корне. Ты разрушаешь таким образом цепочки делегирования. Течет вся абстракция. Для подобных целей (манипуляций данными) надо использовать структуры данных, которые статичны, в отличии от.
Ответить с цитированием
  #25 (permalink)  
Старый 20.01.2015, 22:16
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
Я считаю, что это порочная практика, противоречащая идеологии JS в корне.
Я не говорю, что это хорошо или плохо, а просто показываю что это возможно.

Цитата:
Ты разрушаешь таким образом цепочки делегирования. Течет вся абстракция.
В методе можно учесть это, чтобы, например,

var a = {a: 1};
var b = {__proto__: a, v: 1};

b.toSource()
/*

(function () {
  var stack = [];
  stack.push({a: 1});
  stack.push({__proto__: stack[stack.length - 1], v: 1});
  return stack[stack.length - 1];
})();

*/


И т.д. по аналогии, всё зависит от требований.

Цитата:
Для подобных целей (манипуляций данными) надо использовать структуры данных.
Здесь я согласен, поэтому ТС сразу получил ответ - использовать JSON.
__________________
kobezzza
code monkey
Ответить с цитированием
  #26 (permalink)  
Старый 20.01.2015, 22:26
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

dimy44,
Цитата:
Сложностей не испытываю, но приходится пересматривать привычные вещи (например прототипы, а не классы, итд)
Кто сказал про классы в JS? Они уже есть https://github.com/lukehoban/es6features#classes
Ответить с цитированием
  #27 (permalink)  
Старый 21.01.2015, 11:00
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Ты ж сам говорил, что сперва надо с прототипами навозиться
Ответить с цитированием
  #28 (permalink)  
Старый 21.01.2015, 12:37
Интересующийся
Отправить личное сообщение для dimy44 Посмотреть профиль Найти все сообщения от dimy44
 
Регистрация: 12.01.2015
Сообщений: 15

Мне не важно, чтобы восстановленный объект был строго равен прородителю, нужно чтобы он вел себя также, как и прородитель.
А различие в том, что в строковом представлении скажем словаря dct = {1: "1"} в питоне будет '{1: "1"}' (что str(dct), что repr(dct)), и eval(dct) его можно назад в словарь превратить, а в js по-другому.
Ответить с цитированием
  #29 (permalink)  
Старый 21.01.2015, 12:44
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

Сообщение от Erolast Посмотреть сообщение
Ты ж сам говорил, что сперва надо с прототипами навозиться
Ахаха, лол Что-то я про это забыл)
Да-да, надо сначала хотя бы немного осилить прототипы!
Ответить с цитированием
  #30 (permalink)  
Старый 21.01.2015, 13:15
Профессор
Отправить личное сообщение для SV0L0CH Посмотреть профиль Найти все сообщения от SV0L0CH
 
Регистрация: 07.11.2010
Сообщений: 301

Сообщение от dimy44 Посмотреть сообщение
Мне не важно, чтобы восстановленный объект был строго равен прородителю, нужно чтобы он вел себя также, как и прородитель.
А различие в том, что в строковом представлении скажем словаря dct = {1: "1"} в питоне будет '{1: "1"}' (что str(dct), что repr(dct)), и eval(dct) его можно назад в словарь превратить, а в js по-другому.
Строгое равенство реально для строк, чисел, логических значений и null. Остальные значения объекты и для их создания из строки нужен вызов конструктора, а в таких случаях строгое равенство невозможно. Разве что можно реализовать конструктор который будет запоминать свои экземпляры и при повторных вызовах с теми же параметрами не создавать новый объект, а выдавать существующий.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятное(для меня) поведение eval FanAizu Общие вопросы Javascript 1 06.05.2014 19:43
Обработка json tion Общие вопросы Javascript 15 12.05.2013 18:39
Как вызвать eval в контексте другой функции для доступа к ее локальным переменным? Почемучкин Общие вопросы Javascript 8 29.10.2012 22:31
Не работает eval в IE ..::Silence::.. Общие вопросы Javascript 8 25.03.2009 13:16
Roll-up menu Tanya Общие вопросы Javascript 5 29.08.2008 17:28