https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e8886752-c233-482c-965e-21474766e9b9/Untitled.png

constructor

super and extends keyword

method 상속

function Parent() { }
Parent.staticMethod = function() {
  this.s = 11;
  return 'static method';
}
Parent.prototype.method = function() {
  this.m = 12;
  return 'method';
}
function Child() { }
Child.prototype = new Parent();
Child.prototype.constructor = Child;
var obj = new Child();
class Parent {
  static staticMethod() {
    this.s = 11;
    return 'static method';
  }
  method() {
    this.m = 12;
    return 'method';
  }
}
class Child extends Parent { }
const obj = new Child();
// 기본 메소드 상속은 동일

console.log(obj.method());                   // 'method'
console.log(Child.prototype.method());       // 'method'
console.log(Parent.prototype.method());      // 'method'
// static method 상속은 다르다

// ES5 // static method가 인스턴스에 없기때문에 prototype에도 없고 자식에게 안간다
console.log(obj.staticMethod());             // Uncaught TypeError
console.log(Child.staticMethod());           // Uncaught TypeError
console.log(Parent.staticMethod());          // 'static'

// ES6 // static method도 자식 클래스 까지는 간다
console.log(obj.staticMethod());             // Uncaught TypeError
console.log(Child.staticMethod());           // 'static'
console.log(Parent.staticMethod());          // 'static'

호이스팅 과 TDZ


ES6 Class는 단지 prototype 상속의 문법설탕일 뿐인가?