2016-09-05 2 views
0

배열에 개체가 거의없고 유형 날짜가 붙은 개체에 팩토리에서 일부 소품을 추가하고 싶습니다.기존 객체에 프로토 타입 속성을 추가하는 방법

이 개체에서 이전 값을 제거하지 않아도됩니다. 나는 이런 식으로하려고합니다 :

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

하지만 내가 잘못한 곳에서 작동하지 않습니까? 구문 아래 프로토 타입 사용의 연결을 위해

+0

'createFactory' 란 무엇입니까? 프로토 타입에서 메서드를 호출하는 이유는 무엇입니까? – Bergi

+1

이 경우 팩토리를 사용하는 것은 실수입니다. 왜냐하면이 팩토리는 클래스 * (클래스의 인스턴스가 아닌) *를 생성/반환하기 때문입니다. 좀더 정확하게 말하자면,이 팩토리가 호출 될 때마다 동일한 정적/변경되지 않은 클래스의 새로운 화신입니다. 코드 예제에서 수행하려는 작업은 sth입니다. '$ scope.things = $ scope.things.map (item => item.type === 'date'? Object.assign (new DateClass(), item) : item)'와 비슷하지만, 호출 할 때마다 새로운 날짜 - 클래스를 생성하는 팩토리 대신 'DateClass'를 제공하도록 코드를 변경해야합니다. – Thomas

+0

이고'DateFactory.prototype.createFactory()'메소드는 전혀 이해가되지 않는다. 그것은 존재하지도 않고 무엇을 하는가도 아닙니다. – Thomas

답변

3

항목을 변이하지 않는 forEachitem 변경. 당신이 공장에서 날짜 개체의 인스턴스를 반환해야합니다,

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

는 또한

plunker 업데이트 :

return new date(); 

.. 그리고 다음 바로 메서드를 호출 대신 obj[key]를 사용할 필요가 :

obj[key] = DateFactory.createFactory() 
+0

예! 그것은 작동합니다! 이반, 객체의 이전 매개 변수를 저장할 수 있습니까? 예를 들어 '이름'과 '유형'을 좋아합니까? – YoroDiallo

+0

@YoroDiallo 물론. 모든 새 속성을'item'에 추가하거나 예를 들어. 'item.date'는 이렇게 :'obj [key] .date = DateFactory.createFactory(); ' –

+0

오, 정말 많이 !!! – YoroDiallo

0

Plunker example -

item = Object.create(Date); 
+0

하지만 각도 공장으로 어떻게 만들 수 있습니까? – YoroDiallo

+0

DateFactory를 전달하여 메서드를 만들면됩니다. 같은 항목 = Object.create (DateFactory); – CuriousGeek

+0

불행히도 그것은 작동하지 않습니다 .. if (item.type === 'date') { item = Object.create (DateFactory); }', 객체가 변경되지 않습니다 – YoroDiallo

관련 문제