코드노트

자바스크립트 함수 객체 프로퍼티 정리 본문

Code note/자바스크립트

자바스크립트 함수 객체 프로퍼티 정리

코드노트 2022. 12. 15. 01:07

 

함수는 객체

함수는 프로퍼티를 가질 수 있다.

- 이렇게 알 수 있듯이 함수를 생성하면 프로퍼티를 가지고 있는걸 볼 수 있다.

 

 

 

자바스크립트 프로퍼티 어트리뷰트(내부 슬롯, 내부 메서드)

- 내부슬롯, 내부 메서드는 ECMAScript 사양에 정의된 대로 구현되고 JS 엔진에서 동작한다. 그러나 개발자가 직접 접근할 수 없다. - 내부 슬롯, 내부 메서드는 JS 엔진의 구현 알고리즘을 설명하기

codeno-te.tistory.com

모든 프로퍼티의 어트리뷰트를 보게 되면?

arguments, caller, length, name, prototype 데이터 프로퍼티를 볼 수 있다.

함수 객체의 고유의 프로퍼티이다.


arguments

- 함수 호출을 할 때 전달되는 인수의 정보를 담고 있는 유사 배열 객체

* 유사 배열 객체 : length 프로퍼티를 가진 객체로 for문으로 순회할 수 있는 객체, 배열은 아니다. 배열 메서드를 사용하면 에러가 발생

- 함수 내부에서 지역 변수처럼 사용

- 함수 외부에서는 참조 X

- 자바스크립트 함수는 매개변수와 인수의 개수가 달라도 에러가 나지 않는걸 알 수 있다.

 * 인수가 적으면 할당되지 않은 인수 값은 undefined, 인수가 많으면 무시되

지만 arguments객체의 프로퍼티로 보관된다.

- 인수는 프로퍼티 값, 인수의 순서를 key

 

- 자바스크립트는 매개변수 개수와 인수 개수를 확인하지 않기 때문에 인수 개수를 확인하거나 함수의 동작을 컨트롤할 수 있다.

이 때 사용되는 것이 arguments객체라고 볼 수 있다.

* arguments객체는 매개변수 개수를 확정할 수 없는 가변 인자 함수를 구현할 때 유용하게 사용 된다.


caller

- arguments 객체를 생성한 함수, 함수 자신

- ECMAScript사양에 포함 되지 않은 비표준 프로퍼티

 

 

length

- 인수의 개수

- 함수 정의시 선언한 매개변수의 개수

- arguments 객체의 length는 인자의 개수

- 함수 객체의 length는 매개변수의 개수

 

name

- 함수의 이름

- ES6부터 정식 표준으로 인정

- 함수의 이름과 식별자는 다른걸 까먹지 말자! 함수 이름의 스코프는 함수 내부! 함수를 호출하는 건 식별자!

 

__proto__ 접근자 프로퍼티

- [[ prototype ]] 내부 슬롯은 객체 지향 프로그래밍의 상속을 구현하는 프로토타입 객체를 가르킨다.

- __proto__ 프로퍼티는 내부 슬록이 가리키는 프로토타입 객체에 접근하기 위해 사용하는 접근자 프로퍼티

- 직접 접근할 수 없고 간접적인 방법으로 접근 가능

 

prototype 프로퍼티

- 생성자 함수로 호출할 수 있는 함수 객체

- constructor만이 소유하는 프로퍼티

- 함수가 객체를 생성하는 생성자 함수로 호출될 때 생성자 함수가 생성할 인스턴스의 프로토타입 객체를 가리킨다.