[빌트인 객체]

const Cls = function(){}
Cls.prototype = Object.create(Array.prototype);
const arr = new Cls;
arr[0] = 'test';
arr.length; //0  소용없음!
const Cls = class extends Array{};
const arr = new Cls;
arr[0] = 'test';
arr.length; //1

이걸 가능케 하는 메커니즘

//1. 빌트인객체의 프로토타입
const a = new Array(); //생성자의 프로토타입이 Array.prototype임
//생성자 Array의 prototype은 Array.prototype
 
 
//2. 그 외의 사용자정의 클래스의 프로토타입
const Cls = function(){};
const b = new Cls(); //생성자의 프로토타입이 Function.prototype임
//Cls의 prototype은 Function.prototype

빌트인 객체 상속시 생기는 일

const Cls = class extends Array{
  constructor(length){
    super(length);
  }
};
const Cls = class extends Array{
  constructor(){
    if(classKind == 'base'){ //본인 기본생성자라면 this는 본인이 생성하지만
      this = Object.create(new.target.prototype);
    }else{ //아니라면 부모에게 위임하자. 하지만 new.target은 유지한다.
      this = Reflect.construct(Array, [], new.target);
    }
  }
};

정리

  1. 기존의 경우 인스턴스가 무조건 자식 클래스로 생성되는데 반해,
  2. class문을 이용한 객체 생성은 기본 생성자에게 객체 생성을 위임하기 때문에,
  3. 빌트인 클래스를 상속한 경우 빌트인 클래스가 기본 생성자가 되니,
  4. 우선 객체는 빌트인 클래스로 생성하되,