Аватар для siriusED
32 / 31 / 13
Регистрация: 20.05.2010
Сообщений: 705

Синхронизировать тип объекта

04.07.2017, 17:00. Показов 571. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сохраняю на сервере, в MongoDB, массив объектов. В этом массиве лежат объекты классов `Class1` и `Class2`. Сохраняется все нормально.
Потом я получаю обратно по запросу на сервер json, в котором мой массив содержит объекты типа `Object`.

Как мне теперь определить типы объектов этого массива, что бы сделать из него точно такой же как я сохранял?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.07.2017, 17:00
Ответы с готовыми решениями:

Достать тип объекта
Всем привет товарищи, есть надобность достать тип объекта. Где он находится? или есть у кого идеи, как это сделать ? Смотрите...

Узнать тип объекта
Добрый день. В функцию передается некий аргумент. Задача: определить тип этого аргумента - массив, строка, хеш, регулярное выражение и...

Как определить тип объекта?
Как определить тип объекта arr3? alert(arr3.type)-не работает <html> <script> var n1=parseInt(prompt('Введите количество...

5
Superposition
 Аватар для Padimanskas
950 / 615 / 256
Регистрация: 27.10.2013
Сообщений: 2,083
04.07.2017, 18:52
Цитата Сообщение от siriusED Посмотреть сообщение
Как мне теперь определить типы объектов этого массива, что бы сделать из него точно такой же как я сохранял?
JavaScript
1
2
3
4
5
6
7
8
9
10
11
class SomeClass {
    constructor(){}
}
 
let instance = new SomeClass();
 
let instanceCopy = JSON.parse(JSON.stringify(instance));
 
Object.setPrototypeOf(instanceCopy, SomeClass.prototype);
 
console.log(instanceCopy instanceof SomeClass);
0
Superposition
 Аватар для Padimanskas
950 / 615 / 256
Регистрация: 27.10.2013
Сообщений: 2,083
04.07.2017, 23:58
Цитата Сообщение от siriusED Посмотреть сообщение
Как мне теперь определить типы объектов этого массива, что бы сделать из него точно такой же как я сохранял?
JavaScript
1
2
3
4
5
6
7
8
9
10
11
class SomeClass {
    constructor(){}
}
 
let instance = new SomeClass();
 
let instanceCopy = JSON.parse(JSON.stringify(instance));
 
Object.setPrototypeOf(instanceCopy, SomeClass.prototype);
 
console.log(instanceCopy instanceof SomeClass);
0
 Аватар для siriusED
32 / 31 / 13
Регистрация: 20.05.2010
Сообщений: 705
07.07.2017, 02:45  [ТС]
Padimanskas, Ну я получаю массив объектов с сервера, вместо массива с моими классами, то есть мне нужно просто этот массив `arrayOfObjects - object[]` засунуть в `Object.setPrototypeOf(arrayOfObjects, Mtclass1 | MyClass2)` или что?

Короче вот ситуация, у меня есть let arr = object[];
В нем лежат объекты разных классов `Class1` и `Class2`.

Как мне из этого массива объектов сделать массив с объектами классов?
0
Superposition
 Аватар для Padimanskas
950 / 615 / 256
Регистрация: 27.10.2013
Сообщений: 2,083
07.07.2017, 15:28
Цитата Сообщение от siriusED Посмотреть сообщение
Ну я получаю массив объектов с сервера, вместо массива с моими классами
Вы получаете не массив с классами, а JSON строку такого вида '[{},{},{},...]'. Ее нужно преобразовать, чтобы она стала сущностью js. Для этого есть метод JSON.parse. Даже после того как вы преобразуете ее в объекты js, они все равно не станут теми экземплярами, которые вы создали ранее. Для этого нужно подключить к ним прототип необходимого класса.

Добавлено через 11 минут
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class SomeClass {
    constructor(){
        this.myName = 'Foo';
    }
    sayHello(){
        alert(`Hi! My name is ${this.myName}.`);
    }
}
 
let instance = new SomeClass(); // создаем экземпляр класса
 
let instanceCopy = JSON.parse(JSON.stringify(instance)); превращаем экземпляр в строку и тут же делаем преобразуем ее в объект(это имитирует разбор данных пришедших от сервера)
 
console.log(instanceCopy instanceof SomeClass); // instanceCopy не является экземпляром класса SomeClass и мы не можем вызвать sayHello
 
Object.setPrototypeOf(instanceCopy, SomeClass.prototype); // Устанавливаем прототип класса для экземпляра
 
console.log(instanceCopy instanceof SomeClass); // Теперь мы можем видеть, что экземпляр instanceCopy является производным от класса SomeClass
 
// вызовем sayHello
instanceCopy.sayHello(); // Hi! My name is Foo.'
0
 Аватар для siriusED
32 / 31 / 13
Регистрация: 20.05.2010
Сообщений: 705
08.07.2017, 13:03  [ТС]
Padimanskas, Хорошо, я понял о чем речь. Сегодня это все попробую у себя.
Но еще такой вопрос: а вот если у меня массив не с одим `SomeClass` а их там несколько разных типов, [0] - SomeClass [1] - SomeElseClass итд, как мне узнать какой из них какой, если они все от сервера приходят объектами? Может быть есть какое-то готовое решение (техника) для такой задачи, что бы разпознать?
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.07.2017, 13:03
Помогаю со студенческими работами здесь

Если на форме 2 объекта DTPicker, можно ли их синхронизировать?
1) Если на форме 2 объекта DTPicker, можно ли их синхронизировать? т.е. при изменении даты в одном, дата в другом тоже менялась. 2) А...

Требуется синхронизировать растягивание окна с изменением размера объекта
Вот мой код, но он работает только при загрузке формы. После этого объект не растягивается. while (this.Height != ant.Height) ...

Требуется ли при удалении объекта посредством delete указывать тип объекта?
например, есть указателиvoid *p1; void *p2; есть VCL-объект TButton, есть самописный класс TMyClass; создаются объектыp1=new...

Тип объекта
Здравствуйте, что такое конструктор сообщающий тип объекта? И что здесь подразумевается под типом объекта?

Определить тип объекта
Добрый день Необходимо в зависимости от типа объекта (Label, TextBox, CheckBox, TextBox) программно заполнять поле Caption или Text ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru