2016년도 포스팅인데요.
최근에 @thomasJang 님과 static property 관련해서 잠깐 토론을 했어요.
static method는 표준이고 static property는 state-2인것, TS에서 static property를 표현하는 방법 등을 이야기했거든요.
그러고 나니깐 관성적으로 사용하는 ES6의 Class 스펙에 대해서 궁금해져서 찾아봤습니다.
사실 옛날에 봤던 포스팅인데 그때는 ES6에 대해 잘 알지 못할때라 깊게 이해하지 못했는데, 지금 다시 보니 좋은 내용이라 공유해봅니다.
2개의 좋아요
한가지 궁금한 점이 있는데 위의 글에서 상속을 아래와 같이 구현해 놓았더군요.
var inherit = (function() {
function F(){ }
return function(C, P) {
F.prototype = P.prototype;
C.prototype = new F();
C.constructor.prototype = C;
C.superClass = P.prototype;
}
})();
상속의 한가지 방법이라는 것은 알겠습니다.
제가 알고 있는 prototype의 상속의 방식과 달라서 제가 잘못 하고 있는건지 헷갈려서 질문드립니다.
제가 알고 있는 상속은
let inherit = (function() {
return function ( C, P ) {
C.prototype.__proto__ = P.prototype;
}
})();
이런식으로 표현하는 것으로 알고 있는데, 이런 표기 방식도 마찬가지로 상속이 됨을 확인할 수 있습니다.
instanceof
연산자를 쓰면 마찬가지로 C의 인스턴스와 P가 동일한 prototype을 공유하고있기 때문에 true
를 반환합니다.
제가 javascript의 상속 자체를 잘못 이해하고 있는것인지, 굳이 저런식으로 상속을 표현하는 이유가 잘 이해가 안갑니다.