У меня есть этот json-файл со списком событий. Я хочу создать экземпляр этого файла JSON, чтобы проверить, есть ли какие-либо события, соответствующие классу вебинара, а затем показать его в DOM, но я получаю ошибки или вообще ничего, когда использую if или forEach.
events.json
[{
"title": "Easter",
"date": "4.5.2021",
"time": "23:00 PM",
"LiveEvent": {
"location": "Ireland",
"adress": "Centrul Vechi 21"
},
"party": {"theme" : " '70s "}
},
{
"title": "Party",
"date": "14.11.2025",
"time": "2:00 PM",
"webinar": {
"webinarTitle": "Com",
"webinarLink": "https://google.com"
},
"party": {"theme" : " '70s "}
},
{
"title": "Birthday",
"date": "30.11.2021",
"time": "7:00 PM",
"webinar": {
"webinarTitle": "Drinks",
"webinarLink": "https://drinks.com"
},
"LiveEvent": {
"location": "Cluj",
"adress": "Centrul Vechi 21"
}
}
]
Класс вебинара
class Webinar extends Event {
constructor(title, time, date, webinarTitle, webinarLink){
super(title, date, time)
this.webinarTitle = webinarTitle
this.webinarLink = webinarLink
}
show() {
console.info("This " + this.webinarTitle + " webinar " + "is hosted on " + this.webinarLink)
}
}
да, я анализирую JSON с помощью запроса XHR, а затем я хочу сделать instanceof ответа, чтобы проверить, есть ли у событий свойство вебинара
Чего я не понимаю (это может быть моя собственная проблема), так это того, что означает «do a instanceof»? Не могли бы вы рассказать, как вы ожидаете, что это будет работать?
я хочу проверить каждый объект, есть ли у него свойство веб-семинара, например if (events instanceof Webinar) {...}, но оно не работает
Ах, тогда нет. Разобранный JSON не становится экземпляром класса.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


JSON - это средство сериализации подходящих значений JavaScript (применяются ограничения) в текст и обращения процесса путем анализа текста для воссоздания сериализованного значения. JSON не сериализует класс объекта.
Также JSON сериализует только собственные свойства - ничего в цепочке прототипов объекта не преобразуется в текст.
Короткий ответ - попытка использовать instanceOf для анализируемых значений объекта JSON неэффективна: любые проанализированные значения объекта являются экземплярами Object и ничего больше.
Возможное решение
Частично проблема может заключаться в том, что код class Webinar не соответствует опубликованному JSON. Пытаться
class Webinar extends Event {
constructor(title, time, date, webinarTitle, webinarLink){
super(title, date, time)
this.webinar = {webinarTitle, webinarLink}; // object property
}
show() {
console.info("This " + this.webinar.webinarTitle + " webinar " + "is hosted on " + this.webinar.webinarLink)
}
}
для расширения Event, а затем после кодирования и декодирования JSON проверьте, был ли он изначально объектом Webinar, проверив, есть ли у него свойство webinar:
if ( event.webinar) {
// yes it WAS a Webinar object...
}
И наконец, JSON не сериализует функциональные объекты: декодированный объект Webinar будет обычным объектом с методами, унаследованными от Object.prototype. Никакие оригинальные методы, такие как show, не будут присутствовать в декодированных объектах.