У меня мало объектов в массиве, и я хочу добавить некоторые реквизиты с фабрики в объект с типом даты.
Мне не нужно удалять старые значения из этого объекта. Я стараюсь сделать это следующим образом:
angular.forEach($scope.things, function(item) {
if(item.type === 'date') {
item = DateFactory.prototype.createFactory();
}
})
но это не работает, где я ошибаюсь? Пример Plunker
Изменение 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()
item
или обернуть их, например, в item.date
например: obj[key].date = DateFactory.createFactory();
Для связывания прототипа используйте синтаксис: -
item = Object.create(Date);
createFactory
? Почему вы вызываете метод из прототипа?$scope.things = $scope.things.map(item => item.type === 'date'? Object.assign(new DateClass(), item): item)
Но чтобы это работало, вы должны измените свой код, чтобы предоставить вамDateClass
вместо фабрики, которая создает новый класс даты при каждом вызове.