어제 새벽에 자다 일어나서 만들었다가 치명적인 결함을 가졌다는 것을 알아내고 폐기하고자 한 코드-_-; 걍 지워버리기는 조금 아까운 생각이 들어서 올려본다.
이 코드는 내가 지금까지 본 자바스크립트로 만든 다른 클래스 흉내 코드와는 달리 다단계 상속(?) 형태에서 두 단계 이상의 상위 클래스 메쏘드에 접근 할 수 있도록 되어있다.
보통 자바스크립트에서 상속을 통한 상위 클래스 메쏘드를 실행할 수 있도록 할 때 this 가 인스턴스 자신을 가리키도록 apply(또는 call) 메쏘드의 첫번째 인자를 지정해주는데, 이 때문에 this 에 얽매여(?) 결국 두 단계 이상의 메쏘드까지 갈 수 가 없게된다.
아무튼... 내가 뭔 소릴 하는 건지-_-; 결론은 그래서 어찌어찌하기 위해 eval 을 썼는데 문제는 eval 내의 코드라서 디버깅하기가 곤란하다는 거다.
자신이 만든 코드에 버그가 결코 없을 꺼라는 확신이 있다면(!) 사용해도 문제가 없을 꺼고 매우 편하게 쓸 수 있을 꺼다.
사용방법은... 아 설명하기 귀찮은데-_-; 일반적으로 클래스 흉내 코드를 사용해서 아래와 같은 코드를 작성하면
원하는 결과(0.5 초후에 'success!' 라고 나오는)를 얻지 못하는데 이유는 run 안에서 this 가 o 인스턴스를 가리키지 못 하기 때문이다. 그래서 이를 해결하려면 여러가지 방법이 있지만 아래 같은 성가진 방법을 써야한다.
그치만 저 위의 코드를 쓰면 그냥 아래처럼 쓸 수 있다.
그리고 상속을 했을때 상위 클래스 메쏘드를 아래처럼 자유롭게 호출할 수 있다.
뭐 아무튼 이래저래 클래스 구현에 편리한 기능을 갖추었지만 이걸로 만든 코드는 디버깅도 매우 힘들고, 참 그리고... 인스턴스를 생성하는데 기존의 일반적인 코드를 쓰는 것보다 속도가 무지 느리다.
특히 FF 에서 엄청 느린데 어제 대강 테스트 해 본 바로는 3단계 상속을 한 클래스의 인스턴스를 100개 만드는데 1초 가까이 걸리더라; 아마도 메쏘드 양이 많거나 코드 길이가 길면 더 걸릴 듯?
어찌됐든 느린거야 인스턴스 많이 안 만드는 경우에만 쓰면 되니까 너그럽게 생각할 수도 있겠지만 디버깅이 어렵다는 건 정말 치명적.