
20.01.2015, 21:51
|
 |
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
registrant, Ну как бы логично, что объект создаваемый из строки не должен быть равен объекту прародителю, ибо это другой объект, а в JS объекты сравниваются по ссылке.
Разумеется, если нужно, то можно сделать чтобы равнялось, также можно воссоздать дерево прототипов и т.д. JS позволяет всё это сделать, а в ES6 добавили специальный объект Reflect, в котором есть методы для ещё более удобной работы с объектами.
|
|

20.01.2015, 21:54
|
Аспирант
|
|
Регистрация: 15.01.2015
Сообщений: 39
|
|
Сообщение от kobezzza
|
ибо это другой объект
|
Вот это ключевое слово.
|
|

20.01.2015, 21:59
|
 |
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от registrant
|
Вот это ключевое слово.
|
Дык он и должен быть другим, мы создаём дамп объекта в виде синтаксиса JS, а потом снова натравливаем VM на полученный код и он возвращает новый объект, похожий на прародитель и это абсолютно нормальное поведение, а такая функция может понадобится, если нам по каким либо причинами не подходит JSON (ну например хотим сохранять функции без гемороя с экранированием).
Ну а если очень нужно (только не понятно зачем), чтобы полученный объект был равен исходному, то можно и это сделать, как говорится: было бы желание.
|
|

20.01.2015, 22:09
|
Аспирант
|
|
Регистрация: 15.01.2015
Сообщений: 39
|
|
kobezzza,
Я считаю, что это порочная практика, противоречащая идеологии JS в корне. Ты разрушаешь таким образом цепочки делегирования. Течет вся абстракция. Для подобных целей (манипуляций данными) надо использовать структуры данных, которые статичны, в отличии от.
|
|

20.01.2015, 22:16
|
 |
Быдлокодер;)
|
|
Регистрация: 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.
|
|

20.01.2015, 22:26
|
 |
Профессор
|
|
Регистрация: 23.12.2013
Сообщений: 1,856
|
|
dimy44,
Цитата:
|
Сложностей не испытываю, но приходится пересматривать привычные вещи (например прототипы, а не классы, итд)
|
Кто сказал про классы в JS? Они уже есть https://github.com/lukehoban/es6features#classes
|
|

21.01.2015, 11:00
|
 |
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Ты ж сам говорил, что сперва надо с прототипами навозиться 
|
|

21.01.2015, 12:37
|
Интересующийся
|
|
Регистрация: 12.01.2015
Сообщений: 15
|
|
Мне не важно, чтобы восстановленный объект был строго равен прородителю, нужно чтобы он вел себя также, как и прородитель.
А различие в том, что в строковом представлении скажем словаря dct = {1: "1"} в питоне будет '{1: "1"}' (что str(dct), что repr(dct)), и eval(dct) его можно назад в словарь превратить, а в js по-другому.
|
|

21.01.2015, 12:44
|
 |
Профессор
|
|
Регистрация: 23.12.2013
Сообщений: 1,856
|
|
Сообщение от Erolast
|
Ты ж сам говорил, что сперва надо с прототипами навозиться
|
Ахаха, лол  Что-то я про это забыл)
Да-да, надо сначала хотя бы немного осилить прототипы!
|
|

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