728x90
728x90

 

 

6-1-2 constructor 프로퍼티

생성자 함수의 프로퍼티인 prototype 객체 내부에 있는 프로퍼티, constructor 프로퍼티

 

constuctor 프로퍼티는 생성자 함수, 즉 자기 자신을 참조하는 프로퍼티입니다.  

  • 인스턴스와의 관계에 있어서 필요한 정보
  • 인스턴스로부터 그 원형이 무엇인지를 알 수 있는 수단 

 

예제 6-3  constructor 프로퍼티

 

 

인스턴스의 __proto__ 가 생성자 함수의 prototype 프로퍼티를 참조하며 __proto__가 생략 가능하기에
인스턴스에서 직접 constructor에 접근할 수 있는 수단이 생긴 것
그래서 var arr2= new arr.constructor(3,4); 가 오류 없이 동작한 것이다

=> constructor는 읽기전용속성이 부여된 경우 외에는 값 변경 가능
(기본형 리터럴 변수 number, string, boolean 만 아니면 변경 가능)

 

 

예제 6-4 constructor변경

 

모든 데이터가 d instanceof NewConstructor 명령에 대해 false를 반환
= > constructor를 변경해도 참조대상만 변경
= > 이미 만들어진 인스턴스의 원형이나 데이터타입은 변하지 않음

===> 어떤 인스턴스의 생성자정보를 알아내기 위해 constructor 프로퍼티에 의존하는게 항상 안전하지는 않으나
클래스 상속을 흉내 등은 가능하다 (다음 챕터에서 다룸)

 

 

 

예제 6-5 다양한 constructor 접근법

 

 

 

=> p1 부터 p5 까지는 모두 Person의 인스턴스

다음 각 줄은 모두 동일한 대상을 가리킨다

[Constructor]
[instance].__proto__.constuctor
[instance].constuctor
Object.getPrototypeOf([instance]).constructor
[Constructor].prototype.constructor

 

모두 동일한 객체 (prototype)에 접근 O

[Constructor].prototype
[instance].__proto__ 
[instance] 
Object.getPrototypeOf([instance]) 

 

 

 

02 프로토타입 체인

6-2-1 메서드 오버라이드

prototype 객체를 참조하는 __proto__를 생략하면 인스턴스는 prototype에 정의된 프로퍼티나 메서드를 자신의 것처럼 사용할 수 있다.

 

예제 6-6 메서드 오버라이드

Q. 인스턴스가 동일한 이름의 프로퍼티나 메서드를 가지고 있는 상황이라면?

 

iu.__proto__.getName 이 아닌  iu 객체에 있는  getName 메서드가 호출 ( = 메서드 오버라이드) 되었습니다. 그 이유는

JS 엔진이 getName 메서드를 찾는 방식대로
가장 가까운 대상인 자신의 프로퍼티 검색 -> 없으면 그다음 가까운 __proto__ 를 검색하는데
먼저 자신의 프로퍼티가 검색되어 호출되지 않은 것

메서드 오버라이드 : 메서드 위에 메서드를 덮어씌움 -> 원본은 보존하는 상태에서 다른 대상을 그 위에 얹는 것

 

메서드 오버라이딩 상태에서 보존된 원본을(prototype에 있는 메서드) 찾으려면

console.log(iu.__proto__.getName); //undefined

prototype 상에 name 프로퍼티가 없어서 undefined가 출력됐는데
있다면 아래와 같이 출력될 것

Person.prototype.name = '일요일';
console.log(iu.__proto__.getName); // "일요일"

 

this가 prototype을 바라보고 있으니 call이나 apply로 인스턴스를 바라보게 변경 

console.log(iu.__proto__.getName.call(iu); //지금

일반적으로 메서드가 오버라이드 된 경우 자신으로부터 가장 가까운 메서드에만 접근되나
그 다음으로 가까운 __proto__의 메서드도 우회적 접근 가능하다.

 

 

 

6-2-2 프로토타입 체인

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,

v