U E D R , A S I H C RSS

ZeroPage_200_OK/note (rev. 1.10)

Zero Page_200_OK/note


  • 강의 노트는 날짜나 요일 별로 구분하지 않고 큰 주제별로 분리할 생각입니다. 그렇게 하는 편이 나중에 찾아보기에 좋을것 같습니다 -안혁준
  • 저의 주관적인 부분이 많이 들어 갈수 있으므로 부족하다 생각되는 부분은 채워주세요.
  • 강의 노트는 같이 만들어 나가는 것이므로 모두들 함께 채워나갑시다.

1.1. Prototype 기반 언어

  • prototype언어?
    • oop의 흐름은 class와 prototype으로 나늰다.
    • prototype은 클래스가 들고 있어야하는 함수들을 특정 인스턴스가 들고 있게 만드는 것이다.
    • 이 특정 인스턴스를 prototype이라 부른다.

1.2. 함수형 언어

  • 함수를 일급객체로 다루는 언어
    • 일급객체란?
      • 변수 안에 담을수 있고,
      • 파라미터로 전달할수 있으며,
      • 반환값을 사용할수 있고
      • 할당된이름과 관계없이 구분할수 있다
  • 함수를 마치 일반적인 인스턴스처럼 다루는 언어

2. Javascript 문법


2.1. 클로져

  • 클로져 : 내부의 있는 외부에 있는 함수의 지역 변수를 쓸수 있는것. 때문에 의도하지 않은 결과를 가져올수 있다.
    예시추가바람

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)를 명시적으로 변경할수 있다.

2.3. new의 동작

  • new Person();
    • 1. create instance
    • 2. instance.proto = Person.prototype;
      • 이때의 proto는 프로토타입 체인이라 할수있다.(엔진별로 다를수 있다.)
    • 3. 실행문맥을 instance로 한 생성자를 호출한다.

2.4. prototype


2.4.1. Class vs Prototype

  • Class : 함수와 맴버 변수가 각각 class와 인스턴스에 나누어 져있는것.
  • prototype : 함수와 맴버 변수 모두 인스턴스에 저장되있는것
    • 단지 함수는 다른 인스턴스에 존재한다.
    • 그 다른 인스턴스는 prototype이라 부른다.
      class <-----------------> prototype
      VTable <-----------------> prototype chain (proto)

2.4.2. dispatch

  • 실제 호출해야 하는 함수를 찾는 과정
  • javascript에서는 실행시간에 프로토타입 체인에 의해 실행한다.
    • instance의 proto에서 찾고 없으면 그위에 proto에서 찾고...
  • 코드로 나타내보면..

for (var _proto = a; _proto; _proto = _proto.__proto__)
{
    if (("f" in _proto) && typeof _proto["f"] === "function")
        _proto["f"].apply(a, arguments]);
}
  • 자바스크립트는 함수와 일반 변수와의 구분이 없기때문에 변수 또한 dispatch가 된다.

2.4.3. 상속

  • 상속을 위해서는 prototype chain에 등록하면 된다.

function People(){};
function Man(){};
Man.prototype = new People();
m = new Man();
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:33
Processing time 0.0276 sec