ZeroPage_200_OK/note (rev. 1.7)
- 강의 노트는 날짜나 요일 별로 구분하지 않고 큰 주제별로 분리할 생각입니다. 그렇게 하는 편이 나중에 찾아보기에 좋을것 같습니다 -안혁준
- 저의 주관적인 부분이 많이 들어 갈수 있으므로 부족하다 생각되는 부분은 채워주세요.
- 강의 노트는 같이 만들어 나가는 것이므로 모두들 함께 채워나갑시다.
1.1. Prototype 기반 언어 ¶
- prototype언어?
- oop의 흐름은 class와 prototype으로 나늰다.
- prototype은 클래스가 들고 있어야하는 함수들을 특정 인스턴스가 들고 있게 만드는 것이다.
- 이 특정 인스턴스를 prototype이라 부른다.
- 함수를 일급객체로 다루는 언어
- 일급객체란?
- 변수 안에 담을수 있고,
- 파라미터로 전달할수 있으며,
- 반환값을 사용할수 있고
- 할당된이름과 관계없이 구분할수 있다
- 클로져 : 내부의 있는 외부에 있는 함수의 지역 변수를 쓸수 있는것. 때문에 의도하지 않은 결과를 가져올수 있다.
예시추가바람
2.2. Excuteion Context ¶
- this
- p.do() 에서 p가 실행문맥이다. 그러나 이 함수를변수로 받으면 var f = p.do; f(); 이런식으로 그러면 f는 실행문맥이 없기 때문에 전역객체가 실행문맥으로 간주된다.
- 결론적으로 함수 앞 마지막 . 앞에 있는 것이 중요하다.
- func.apply(ec, arguments) 나 func.call(ec, arg1, arg2, ... )으로 func안에서의 실행문맥(this)를 명시적으로 변경할수 있다.
- new Person();
- 1. create instance
- 2. instance.proto = Person.prototype;
- 이때의 proto는 프로토타입 체인이라 할수있다.(엔진별로 다를수 있다.)
- 3. 실행문맥을 instance로 한 생성자를 호출한다.
2.4.1. Class vs Prototype ¶
- Class : 함수와 맴버 변수가 각각 class와 인스턴스에 나누어 져있는것.
- prototype : 함수와 맴버 변수 모두 인스턴스에 저장되있는것
- 단지 함수는 다른 인스턴스에 존재한다.
- 그 다른 인스턴스는 prototype이라 부른다.
class <-----------------> prototype
VTable <-----------------> prototype chain (
proto)
- 실제 호출해야 하는 함수를 찾는 과정
- javascript에서는 실행시간에 프로토타입 체인에 의해 실행한다.
- instance의 proto에서 찾고 없으면 그위에 proto에서 찾고...
- 상속을 위해서는 prototype chain에 등록하면 된다.
function People(){};
function Man(){};
Man.prototype = new People();
m = new Man();