# 함수의 prototype 프로퍼티
일반 객체에 prototype
프로퍼티를 사용하면 아무런 일이 일어나지 않는다.
let animal = {
eats: true
};
function Rabbit(name) {
this.name = name;
}
Rabbit.prototype = animal;
let rabbit = new Rabbit("White Rabbit"); // rabbit.__proto__ == animal
alert( rabbit.eats ); // true
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
Rabbit.prototype = animal
new Rabbit
을 호출해 만든 새로운 객체의[[Prototype]]
을animal
로 설정하라
# F.prototype 프로퍼티
new F
가 호출될 때만 사용된다.new F
를 호출해 새롭게 만든 객체의[[Prototype]]
을 할당해준다.- 새로운 객체가 만들어 진 후에
F.prototype
프로퍼티가 바뀌면 (F.prototype = <another object>
)new F
로 만들어지는 새로운 객체는another object
를[[Prototype]]
으로 갖게 된다.- 기존 객체의
[[Prototype]]
은 그대로 유지 된다.
# 함수의 prototype 프로퍼티와 constructor 프로퍼티
- 모든 함수는
prototype
프로퍼티를 갖는다. - 기본
prototype
프로퍼티가 가리키는 객체contructor
프로퍼티 하나만 있는 객체contructor
프로퍼티는 함수 자신을 가리킨다.
function Rabbit() {}
/* 기본 prototype
Rabbit.prototype = { constructor: Rabbit };
*/
1
2
3
4
5
2
3
4
5
Rabbit 을 구현한 객체 모두에서 [[Prototype]]
을 거쳐 contructor
프로퍼티를 사용할 수 있다.
function Rabbit() {}
// 기본 prototype:
// Rabbit.prototype = { constructor: Rabbit }
let rabbit = new Rabbit(); // {constructor: Rabbit}을 상속받음
alert(rabbit.constructor == Rabbit); // true (프로토타입을 거쳐 접근함)
1
2
3
4
5
6
7
2
3
4
5
6
7
# contructor
프로퍼티의 사용
객체를 만들 때 어떤 생성자가 사용되었는지 알 수 없는 경우 (서드 파티 라이브러리 객체인 경우) 사용한다.
function Rabbit(name) {
this.name = name;
alert(name);
}
let rabbit = new Rabbit("White Rabbit");
let rabbit2 = new rabbit.constructor("Black Rabbit");
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
← 프로토타입 상속 네이티브 프로토타입 →