OOP in Javascript
/* 클래스, 인스턴스/클래스 변수, 메서드 */
function Person(name){
this.name = name; //인스턴스 멤버변수(public)
var nickname = 'pretty_' + name; //함수 지역변수(private)
this.getNickName = function(){ //메서드(지역변수 엑세스)
return nickname;
}
}
Person.cName = "인간"; //클래스 멤버변수
Person.prototype.age = 39; //인스턴스 멤버변수 추가
Person.prototype.getSummary = function(){ //메서드 추가
return this.name + '(' + this.getNickName() + ')';
}
var person = new Person('박종명'); //인스턴스 생성
console.log(person.name); //인스턴스 변수 액세스
console.log(person.getNickName()); //메서드 엑세스(메서드를 통해 함수의 지역변수 액세스)
console.log(Person.cName); //클래스 변수 액세스
console.log(person.getSummary());
/* 상속 */
function Korean(name,age){
Person.call(this,name); //부모 생성자 함수 호출
this.age = age;
}
Korean.prototype = new Person(); //상속
Korean.prototype.getSummary = function(){ //오버라이딩
return this.name + '(' + this.getNickName() + ')' + '(' + this.age + ')';
}
var koreanPerson = new Korean('한국사람',20); //자식 인스턴스 생성
console.log(koreanPerson.name); //부모 멤버변수 엑세스
console.log(koreanPerson.getSummary()); //자식 오버라이딩 메서드 엑세스
/* 객체 타입 확인 */
console.log(person instanceof Person);
console.log(koreanPerson instanceof Person);