namespace, class, design pattern

Namespacing

팀 프로젝트 시 많은 양의 자바스크립트 코드를 작성할 때,
타 팀원이 작성한 전역변수가 overwrite 되는 경우가 발생한다.
이를 막기 위해 namespacing 을 활용한다.

var NameSpace = {
    a:["apple","banana","orange"],
    b:true,
    c:23,
    d:function(){
        console.log("dd");
    }
};
console.log(NameSpace.d());

ES5 로 class 구현

function Cat(name){
    this.name = name;
}
Cat.prototype.speak = function(){
    console.log(this.name + ' makes some noise.');
};
function Lion(name){
    //'super()' 호출
    Cat.call(this. name);
}
// 'Cat' 클래스 상속
Lion.prototype = Object.create(Cat.prototype);
Lion.prototype.constructor = Lion;
// 'speack()' 메서드 오버라이드
Lion.prototype.speak = function(){
    Cat.prototype.speak.call(this);
    console.log(this.name + ' roars.');
};

ES6 (ES2015) 로 class 구현

class Cat{
    constructor(name){ //인스턴스를 생성하고 클래스 프로퍼티를 초기화하기 위한 특수한 메소드이다.
        this.name = name;
    }
    speak(){
        console.log(this.name + ' makes some noise.');
    }    
}
class Lion extends Cat{
    speak(){
        super.speak();
        console.log(this.name + ' roars.');
    }
}

클래스
class
객체지향
객체 생성 패턴