JavaScript 튜토리얼

프로토타입 체인

3.9.3) 프로토타입 체인

JavaScript에서 속성이나 메서드를 참조하게 되면먼저 자신 안에 멤버가 정의되어있는지 찾아본 다음발견하지 못하면 그 프로토타입으로 이동하여 해당 프로토타입 객체 내에서 멤버를 찾는다이는 멤버를 찾거나멤버를 찾지 못하고 null을 반환하고서야 비로소 끝나는데이러한 객체들의 연쇄를 가리켜 프로토타입 체인(prototype chain)이라고 한다.

프로토타입 객체는 생성한 각각의 객체에서부터 최상위 객체인 Object의 프로토타입까지 연결되어있다다음의 예제를 살펴보자.

prototype_chain.htm

function Person(name, age, greeting) {

this.myName = name;

this.myAge = age;

 

// 사람마다 인사하는 방법이 다르다고 하자.

this.greeting = greeting;

}

// 사람을 표현하는 방법은 모두 같다.

Person.prototype.myInfo = function() {

return 'Person: ' + this.myName + ', ' + this.myAge;

};

 

function main() {

var person = new Person("kid", 10, function() { Log("I'm a boy!"); });

 

// 1.1) person 객체의 greeting 멤버를 찾습니다.

// 1.2) greeting 멤버가 있으므로 이를 호출합니다.

person.greeting();

 

// 2.1) person 객체에서 myInfo 멤버를 찾습니다.

// 2.2) person.prototype 객체로 이동하여 myInfo 멤버를 찾습니다.

// 2.3) myInfo 멤버가 있으므로 이를 호출합니다.

Log(person.myInfo());

 

// 3.1) person 객체에서 toString 멤버를 찾습니다.

// 3.2) person.prototype 객체로 이동하여 toString 멤버를 찾습니다.

// 3.3) Object.prototype 객체로 이동하여 toString 멤버를 찾습니다.

// 3.4) toString 멤버가 있으므로 이를 호출합니다.

Log(person.toString());

 

// 3.1) person 객체에서 wrong 멤버를 찾습니다.

// 3.2) person.prototype 객체로 이동하여 wrong 멤버를 찾습니다.

// 3.3) Object.prototype 객체로 이동하여 wrong 멤버를 찾습니다.

// 3.4) wrong 멤버가 없으므로 undefined를 반환합니다.

Log(person.wrong);

}

실행 결과

I'm a boy!

Person: kid, 10

[object Object]

undefined

실행 결과를 참고하여 주석을 읽어보면 프로토타입 체인을 이해할 수 있을 것이다.

댓글

댓글 본문
graphittie 자세히 보기