Javascript / Typescript: новый экземпляр класса внутри функции Array.prototype.map не сохраняется

У меня следующий класс:

class Category {
  static ObjectMapToCategory(id: number, display: string, name: string): Category {
    return new Category(id, display, name);
  }

  constructor(private id: number, private display: string, private name: string) {
  }

  get Id(): number {
    return this.id;
  }

  get Display(): string {
    return this.display;
  }

  get Name(): string {
    return this.name;
  }
};

Из конечной точки API я получаю массив этого другого класса:

class CategoryModel {
  constructor(public id: number, public display: string, public name: string) {
  }
}

Предположим, я храню ответ API в:

let apiResponseArray:CategoryModel[];

Идея состоит в том, чтобы преобразовать этот массив в другой типа Category []. Для этого я использую функцию Array.prototype.map:

let categoriesArray:Category[] = apiResponseArray.map(categoryModelElement => new Category(categoryModelElement.id, categoryModelElement.display, categoryModelElement.name));

Тем не менее, я получаю массив объектов, содержащий только свойства: id, display и name. Но свойства (получатели) Id, Display и Name из класса Category теряются. Есть идеи, почему? Имеет ли это какое-либо отношение к тому, что сборщик мусора удаляет новый экземпляр категории после возврата с карты? Таким образом, он воспринимается не как экземпляр класса, а как простой объект? Это мои единственные мысли ...

Вместо этого, если я это сделаю:

let categoriesArray:Category[] = [];
apiResponseArray.forEach(categoryModelElement => categoriesArray.push(new Category(element.id, element.display, element.name));

Тогда это работает. Я получаю свой массив элементов категории.

Заранее спасибо!

"получить массив объектов, содержащий только свойства: id, display и name" Как вы это проверяете?
Felix Kling 23.06.2018 18:17

У меня работает, если я запускаю этот код в Игровая площадка TypeScript (чернила детской площадки в pastebin; слишком долго для комментария). Я вижу аксессоры в консоли. Обновите свой вопрос, добавив минимальный воспроизводимый пример, демонстрирующий проблему.

T.J. Crowder 23.06.2018 18:20

@FelixKling, проверял через отладку.

Max Tomasello 24.06.2018 06:30

@ T.J.Crowder Я постараюсь привести более полный пример.

Max Tomasello 24.06.2018 06:30

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

Felix Kling 24.06.2018 14:57
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
165
0

Другие вопросы по теме