Skip to content

Latest commit

 

History

History
57 lines (34 loc) · 2.69 KB

Internal Slot and Internal Method.md

File metadata and controls

57 lines (34 loc) · 2.69 KB

Internal Slot and Internal Method

내부 슬롯과 내부 메서드는 ECMAScript 명세에서 객체를 설명할 때 사용하는 알고리즘과 내부 상태이다.

  • **내부 메서드(Internal method)**는 ECMAScript 명세가 객체의 런타임 동작을 설명하는 알고리즘을 가리키기 위해 사용하는 용어이다.
  • **내부 슬롯(Internal slot)**은 ECMAScript 명세가 객체의 내부 상태를 가리키기 위해 사용하는 용어이다. 예를 들어, 모든 객체는 [[Prototype]]이라는 내부 슬롯을 가진다.
  • ECMAScript 명세는 내부 메서드와 내부 슬롯의 이름을 [[]]로 감싸 표현한다.

모든 객체가 가지는 내부 슬롯

TODO

모든 객체가 가지는 내부 메서드

TODO

함수 객체가 추가로 가지는 내부 슬롯

[[Environment]]

함수 정의가 평가될 당시의 환경을 나타내는 환경 레코드를 값으로 가진다. 함수 정의가 평가되어 실행된 함수 실행 컨텍스트의 렉시컬 환경의 외부 환경으로 사용된다. 실행 컨텍스트클로저를 참고한다.

함수 객체가 추가로 가지는 내부 메서드

[[Call]]

함수가 일반 함수로서 호출되면 내부 메서드 [[Call]]이 호출된다.

function foo() {}
foo();	// 일반 함수로서 호출: [[Call]]이 호출된다.

내부 메서드 [[Call]]을 갖는 객체를 호출 가능(callable)하다고 한다. 호출할 수 있는 객체는 곧 함수이므로 모든 함수 객체는 반드시 호출 가능하다.

[[Construct]]

함수가 new 연산자와 함께 생성자 함수로서 호출되면 내부 메서드 [[Construct]]가 호출된다.

function foo() {}
new foo();	// 생성자 함수로서 호출: [[Construct]]이 호출된다.

내부 메서드 [[Construct]]를 갖는 함수 객체를 constructor라고 한다. 모든 constructor는 함수이므로 [[Call]] 역시 가진다. 그러나 모든 함수가 constructor는 아니다.

constructor와 non-constructor에 대해서는 Constructor Function를 참고한다.

참고