본문 바로가기

언어/javascript

javascript : new 키워드

반응형

생성자 함수를 생성할 때는 모두 new 키워드를 사용해왔습니다. 왜 new 키워드를 사용할까요?

new 키워드를 사용하지 않으면 어떠한 일이 발생할까요? 생성자 함수를 생성하고 new 키워드로 객체를 생성합니다.

// 생성자 함수를 선언합니다.
function Constructor(value){
    this.value = value;
}

// 변수를 선언합니다.
var constructor = new Constructor('Hello');

// 출력합니다.
console.log(constructor.value);

 

Rectangle 객체와 함수

// 생성자 함수를 선언합니다.
function Rectangle(width, height){
    this.width = width;
    this.height = height;
}

Rectangle.prototype.getArea = function(){
    return this.width * this.height;
};

// 변수를 선언합니다.
var rectangle = new Rectangle(5,7);

// 출력합니다.
console.log('AREA: '+ rectangle.getArea());

width 속성이나 heght 속성에 음수를 입력하면 예외가 발생. 이러한 경우를 대비하기 위해서 클로저를 활용한다.

function Rectangle(w, h) {
    // 변수를 선언합니다.
    var width = w;
    var height = h;

    // 메서드를 선언합니다.
    this.getWidth = function () { return width; };
    this.getHeight = function () { return height };
    this.setWidth = function (w) {
        width = w;
    };

    this.setHeight = function (h) {
        height = h;
    };
}

 

예외처리 하는 방법

// 생성자 함수를 선언합니다.
function Rectangle(w, h) {
    // 변수를 선언합니다.
    var width = w;
    var height = h;

    // 메서드를 선언합니다.
    this.getWidth = function () { return width; };
    this.getHeight = function () { return height; };
    this.setWidth = function (w) {
        if (w < 0) {
            throw '길이는 음수일 수 없습니다.';
        } else {
            width = w;
        }
    };

    this.setHeight = function (h) {
        if (h < 0) {
            throw '길이는 음수일 수 없습니다.';
        } else {
            height = h;
        }
    };
}

Rectangle.prototype.getArea = function () {
    return this.getWidth() * this.getHeight();
};

// 변수를 선언합니다.
var rectangle = new Rectangle(5,7);
rectangle.setWidth(-2);

// 출력합니다.
console.log('AREA: '+ rectangle.getArea());
반응형

'언어 > javascript' 카테고리의 다른 글

javascript : prototype, constructor  (0) 2020.12.14
javascript : 상속  (0) 2020.12.10
javascript : 프로토타입으로 메서드 생성  (0) 2020.12.09
javascript : instanceof  (0) 2020.12.09
javascript : 메서드 생성  (0) 2020.12.09