중복을 제거하는 방법;팩토리 패턴, 프로토타입

To avoid duplication : Factory pattern, prototype

프로토타입과 참조관계를 통해 공통되는 속성을 수정할 수 있다. 한번에 모두 다!

_proto_ : JS가 객체의 속성을 찾을 때 쓰인다.

하지만 이것은 비표준이기 때문에 쓰면 안된다!

팩토리패턴과 프로토타입 등은 객체끼리 데이터를 공유할 수 있다는 것을 보여준다.

  1. 팩토리 패턴

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);

Last updated