자바스크립트 method inheritance -8
2018-03-18
function Person(n ,a){
this.name = n;
this.age = a;
}
var gomu = new Person('고무곰', 30);
var iu = new Person('아이유', 25);
gomu.setOlder =function(){
this.age +=1;
}
gomue.getAge = function(){
return this.age;
}
iu.setOlder =function(){
this.age +=1;
}
iu.getAge = function(){
return this.age;
}
// 코드 중복의 문제를 가지고 있다.
// prototype으로 메소드를 이동
function Person(n ,a){
this.name = n;
this.age = a;
}
Person.prototype.setOlder =function(){
this.age +=1;
}
Person.prototype.getAge = function(){
return this.age;
}
var gomu = new Person('고무곰', 30);
var iu = new Person('아이유', 25);
gomu.__proto__.setOlder();
gomu.__proto__.getAge();//NaN
// 메소드들의 this가 gomu가 아닌 gomu.__proto__를 가리키기 때문
gomu.setOlder();
gomu.getAge(); // 31
// this가 gomu를 가리킴
// __proto__는 생략이 가능하기 때문에 마치 자신의 메소드처럼 호출이 가능하다
--
// 만약 생성자함수의 prototype에 age라는 프로퍼티가 있다면 결과가 다르다
Person.prototype.age = 100;
gomu.__proto__.setOlder();
gomu.__proto__.getAge();// 101
gomu.setOlder();
gomu.getAge(); // 31
메소드 호출시 this가 어떻게 bind되는지 생각해보자
잘 이해가 안되네