중복을 제거하는 방법;팩토리 패턴, 프로토타입
To avoid duplication : Factory pattern, prototype
프로토타입과 참조관계를 통해 공통되는 속성을 수정할 수 있다. 한번에 모두 다!
_proto_ : JS가 객체의 속성을 찾을 때 쓰인다.
하지만 이것은 비표준이기 때문에 쓰면 안된다!
팩토리패턴과 프로토타입 등은 객체끼리 데이터를 공유할 수 있다는 것을 보여준다.
var 프로토타입 = {
type: '카드',
attack: function() {},
defend: function() {},
};
function 카드공장(name,att,hp) {
var 카드 = {
name: name,
att: att,
hp: hp,
}
카드._proto_ = 프로토타입
return 카드;
}
프로토타입이 참조를 하고 있기 때문에 프로토타입.type = '장난감' 으로 하면 프로토타입 객체들의 type이 한번에 다 바뀌어진다.
2. 프로토타입 : 공통되는 속성이나 데이터를 프로토타입에 담는다. 수정에 용이하기 때문이다.
var card = {
type: '카드',
name: '제로초',
};
var card2 = {
type: '카드',
name: '무',
};
var card3 = {
type: '카드',
name: '토',
};
var card30000 = {
type: '카드',
name: '자고싶다',
};
위와 같은 코드가 있을 때, type을 변경하고자 한다면 같은 형태의 객체를 하나하나 다 바꿔야할 것이다.
var 프로토타입 = {
type: '카드',
attack: function() {},
defend: function() {},
};
function 카드공장(name,att,hp) {
var 카드 = {
name: name,
att: att,
hp: hp,
}
카드._proto_ = 프로토타입
return 카드;
}
_proto_ 를 대신하여 Object.create를 사용할 수 있다.
var 프로토타입 = {
type: '카드',
attack: function() {},
defend: function() {},
};
Object.create(프로토타입);
Object.keys와 forEach문을 사용하여 객체를 복사할 때 Object.assign을 사용하여 줄일 수 있다. (1단계 복사할 때 사용)
Object.keys(obj).forEach(function (key) {
obj[key] = obj[key]
});
Object.assign(obj2,obj);