The Web Developer 부트캠프 2022

JS 프로토타입과 클래스, new

거위발바닥 2022. 9. 27. 20:07
String.prototype

을 사용하면 문자열에 사용할 수 있는 모든 프로토타입 메서드가 배열로 나온다.

String.prototype.yell = function () {
    console.log(this.toUpperCase());
}

이렇게 새로운 yell이라는 메소드를 만들어서 "hi".yell() 입력시 출력값으로 HI가 나온다.

존재하고 있는 메소드를 같은 이름을 써서 대체할 수도 있다. 

 

class Color { // class 로 새로운 객체를 만들때는 앞에가 대문자, 밑의 new도 동일
    constructor(r, g, b, name) {
        this.r = r; // this는 자동으로 새로운 객체를 참조  ( new를 사용하면 자동으로 빈 객체가 생기는데 그것을 참조한다. )
        this.g = g; // new를 사용하지 않으면 수동으로 빈 객체를 만들어야 한다. const color = {}; 이렇게
        this.b = b;
        this.name = name;
    }
    innerRGB() {
        const { r, g, b } = this; // this에서 r,g,b 객체들을 추출함
        return `${r}, ${g}, ${b}`; // 추출한 r,g,b객체들
    }
    rgb() {
        return `rgb(${this.innerRGB()})`;
    }
    greet() { // 메소드를 만들때는 이전과 같이 Color.prototype.rgb = function() 등이 필요 없고, 이렇게 넣어주면 class가 prototype에 넣어줌
        return `HELLO FROM ${this.name}!`;
    }
    rgb2() {
        const { r, g, b } = this;
        return `rgb(${r}, ${g}, ${b})`; // r,g,b를 변수로 따로 지정한 것이 아니기 때문에. 위에서 r,g,b 객체들을 this로 지정함
    }
}

const c1 = new Color(255, 67, 87, 'tomato') // 이것을 실행한후 log를 보면 prototype안에 있는것이 아닌 객체 안에 있다. 그 이유는 new 키워드를 사용했기 때문이다.
// protoype 안에는 사용하지 않은 greet 메소드가 들어있고 c1.greet() 를 사용하면 "HELLO FROM tomato!" 가 나온다.

직접 만들어보자