이번 시험 기간에... 프로토타입 범위가 또 들어있네요...
아무튼 화이팅해봅시다...
어떤 객체의 상위 객체 역할을 하는 객체, 하위 객체에게 자신의 프로퍼티와 메서드를 상속.
JS는 프로토타입을 기반으로 상속을 구현한다.
let o = {};
// __proto__ 게터로 [[Prototype]] 객체 접근
console.log(o.__proto__);
// Object.getPrototypeOf() 메소드로도 객체 접근
console.log(Object.getPrototypeOf(o));
// true
console.log(o.__proto__ === Object.getPrototypeOf(o));
객체의 프로퍼티나 메서드에 접근했을 때 발견하지 못하면 객체의 [[Prototype]] 객체에 접근 후 해당 속성, 메서드가 있는지 검색
프로토타입 체인을 검색하는 과정에서 가장 먼저 만나게 된 속성, 메서드에 접근
메소드명 | 의미 | 사용법 |
---|---|---|
.proto | 객체 지정 가능 | a.proto = 프로토타입으로 사용될 객체 |
Object.getPrototypeOf() | [[Prototype]] 객체 접근 가능 | - |
Object.setPrototypeOf(value, proto) | 프로토타입을 지정할 객체 지정 가능 | value = 프로토타입을 지정할 객체 proto = 프로토타입으로 사용될 객체 |
function a() {};
let b = function() {};
console.log(a.prototype); // cunstructor : a
console.log(b.prototype); // cunstructor : a
객체.proto === 클래스.prototype 는 완전히 일치하는 레퍼런스 변수
prototype 객체에 공통 메서드를 정의하더라도 메서드 내부의 this의 값은 해당 메서드를 호출하
는 객체(점(.) 앞의 객체)를 가리키므로 문제 없이 사용 가능