부트캠프/자바스크립트 완벽 가이드

[JavaScript] getPrototypeOf, setPrototypeOf, isPrototypeOf

하이고니 2023. 3. 6. 14:24

 

 

객체의 prototype 속성은 그 객체가 프로퍼티를 상속하는 '부모 객체'이다.

prototype 속성은 객체가 생성될 때 함께 설정된다.

 

1. 객체 리터럴로 생성된 객체의 프로토타입은 Object.prototype이다.

2. new로 생성한 객체의 프로토타입은 함수의 prototype 프로퍼티 값이다.

3. Object.create()로 생성된 객체의 프로토타입은 Object.create()의 첫 번째 인자다(null일 수 있다).

 

객체의 프로토타입은 객체를 Object.getPrototypeOf()에 전달해서 파악할 수 있다.

 

Object.getPrototypeOf({})		// => Object.prototype
Object.getPrototypeOf([])		// => Array.prototype
Object.getPrototypeOf(()=>{})		// => Function.prototype

 

객체가 다른 객체의 프로토타입인지(또는 프로토타입 체인에 속해 있는지)는 isPrototypeOf() 메서드로 파악한다.

객체의 prototype 속성은 객체가 생성될 때 정해지며 일반적으로는 그대로 고정된다. 다음과 같이 Object.setPrototypeOf()로 객체의 프로토타입을 바꿀 수 있다.

 

let o = {x: 1};
let p = {y: 2};
Object.setPrototypeOf(o, p);  // o의 프로토타입을 p로 정한다.
o.y   // => 2: o는 이제 프로퍼티 y를 상속한다.
let a = [1, 2, 3];
Object.setPrototypeOf(a, p);  // 배열 a의 프로토타입을 p로 바꾼다.
a.join  // => undefined: 이제 a에는 join() 메서드가 없다.