가수면
프로토타입 본문
객체는 생성될 때 내부 프로퍼티([[Prototype]])를 가지게 되는데 이 내부 프로퍼티가 다른 객체를 참조하는 경우 참조 대상을 '프로토타입(prototype)'이라 부른다.
프로토타입은 객체의 상위(부모) 역할을 하는 객체이며, 객체는 프로토타입의 속성과 메서드를 상속받아 사용할 수 있다.
그렇게 객체의 [[Prototype]] 연결을 따라 상위 프로토타입을 찾아가는 것을 '프로토타입 체인'이라고 한다.
프로토타입은 부모 객체이지만, 모든 객체가 동일한 프로토타입을 참조한다고 보긴 어렵다. 생성될 때 자신만의 프로토타입을 가지게 된다는 것이 맞을 것이다.
두 코드를 잘 비교해보자.
class A {
method() {
console.log('A 메서드 호출');
}
}
class B {}
B.prototype = new A();
const b = new B();
b.method(); // "A 메서드 호출"
let arr = [1, 2, 3];
// arr은 Array.prototype을 상속받았나요?
alert( arr.__proto__ === Array.prototype ); // true
// arr은 Object.prototype을 상속받았나요?
alert( arr.__proto__.__proto__ === Object.prototype ); // true
// 체인 맨 위엔 null이 있습니다.
alert( arr.__proto__.__proto__.__proto__ ); // null
이런 것도 가능하다.
메서드 빌려오기
let obj = {
0: "Hello",
1: "world!",
length: 2,
};
obj.join = Array.prototype.join;
alert( obj.join(',') ); // Hello,world!
그러나 이 경우 사이드 이펙트와 배열의 내장 메서드가 객체의 속성으로 할당되며 생기는 메모리 문제를 주의해야 한다.
'JavaScript > JavaScript' 카테고리의 다른 글
GraphQL (0) | 2023.07.12 |
---|---|
encodeURIComponent() (0) | 2023.05.20 |
좌표 구하기 (0) | 2023.05.10 |
데이터 속성 (0) | 2023.05.09 |
|| (논리곱) vs ?? (널 병합 연산자) (0) | 2023.04.03 |
Comments