Как добавить свойство прототипа в существующий объект

0

У меня мало объектов в массиве, и я хочу добавить некоторые реквизиты с фабрики в объект с типом даты.

Мне не нужно удалять старые значения из этого объекта. Я стараюсь сделать это следующим образом:

  angular.forEach($scope.things, function(item) {
    if(item.type === 'date') {
      item = DateFactory.prototype.createFactory();
    }
  })

но это не работает, где я ошибаюсь? Пример Plunker

  • 0
    Что такое createFactory ? Почему вы вызываете метод из прототипа?
  • 1
    в этом случае использование фабрики является ошибкой, в первую очередь, потому что эта фабрика создает / возвращает классы (не экземпляры классов) . Чтобы быть более точным: новое воплощение того же статического / неизменного класса, каждый раз, когда вызывается эта фабрика. То, что вы, вероятно, захотите сделать в своем примере кода, это sth. больше похоже на $scope.things = $scope.things.map(item => item.type === 'date'? Object.assign(new DateClass(), item): item) Но чтобы это работало, вы должны измените свой код, чтобы предоставить вам DateClass вместо фабрики, которая создает новый класс даты при каждом вызове.
Показать ещё 2 комментария
Теги:
object
arrays
frontend

2 ответа

3
Лучший ответ

Изменение item пределах forEach не изменяет элемент. Вместо этого вам нужно использовать obj[key]:

angular.forEach($scope.things, function(item, key, obj) {
    if(item.type === 'date') {
      obj[key] = DateFactory.prototype.createFactory();
    }
  })

Обновленный плункер

Кроме того, вы должны вернуть экземпляр объекта даты с фабрики:

return new date();

.. и затем просто вызовите метод:

obj[key] = DateFactory.createFactory()
  • 0
    да! оно работает! Иван, могу ли я сохранить предыдущие параметры в объекте? например, «имя» и «тип»?
  • 0
    @YoroDiallo Конечно. Вы можете просто добавить все новые свойства к item или обернуть их, например, в item.date например: obj[key].date = DateFactory.createFactory();
Показать ещё 1 комментарий
0

Для связывания прототипа используйте синтаксис: -

item = Object.create(Date);
  • 0
    но как я могу сделать это с угловой фабрикой?
  • 0
    Вы просто передаете DateFactory для создания метода. like item = Object.create (DateFactory);
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню