하루에 한 문제
함수 객체의 기본 프로퍼티 본문
몇 번이나 말했지만 자바스크립트에서 함수는 객체다(매우중요)
하지만 일반 객체와는 다르게 추가로 함수 객체만의 표준 프로퍼티가 정의되어 있다
function add(x, y) {
return x + y;
}
console.dir(add);
- 결과를 보면 add()함수는 arguments, caller, length등과 같은 다양한 프로퍼티가 기본적으로 생성된다!
- 이러한 프로퍼티들이 함수를 생성할 때 기본적으로 포함되는 표준 프로퍼티이다.
ECMA5스크립트 명세서에는 모든 함수가 length와 prototype 프로퍼티를 가져야 한다고 기술한다.
이 두 프로퍼티는 나중에 살펴보고 우선 name, caller, arguments, _proto_를 살펴보자
name
함수의 이름
caller
자신을 호출한 함수
arguments
함수를 호출할 때 전달된 인자값
_proto_
블로그의 데이터타입 이라는 글에서 모든 자바스크립트 객체는 자신의 프로토타입을 가리키는 [[Prototype]]이라는 내부 프로퍼티를 가진다고 말했다.
add()함수역시 객체이므로 이를 가지고 있다.
ECMA 표준에서는 add()와 같은 함수 객체의 부모 역할을 하는 프로토타입 객체를 Function.prototye객체라고 한다.
Function.prototype가 가지고 있어야 하는 프로퍼티와 메서드
- construcotr
- toString()
- apply()
- call()
- bind
가 있다. 지금은 이런게 있다고 알고만 넘어가자!
length 프로퍼티
function func0() {
}
function func1(x) {
return x;
}
function func2(x,y) {
return x+y;
}
function func3(x,y,z) {
return x+y+z;
}
console.log('func0.length : ' + func0.length); // func0.length : 0
console.log('func1.length : ' + func1.length); // func0.length : 1
console.log('func2.length : ' + func2.length); // func0.length : 2
console.log('func3.length : ' + func3.length); // func0.length : 3
//인자개수를 뜻한다.
length프로퍼티는 정의한 인자개수를 나타낸다
prototype 프로퍼티
- 모든 함수는 객체로서 prototype 프로퍼티를 가지고 있다.
- 주의할 점은 모든 객체의 부모를 나타내는 내부 프로퍼티인 [[Prototype]]과 혼동하면 안된다!
- 두 프로퍼티 모두 프로토타입 객체를 가리킨다는 점에서 공통점이 있지만 관점에 차이가 잇다.
- 모든 객체에 있는 내부 프로퍼티인[[Prototype]]는 객체 입장에서 자신의 부모 역할을 하는 프로토타입 객체를 가리킨다.
- 반면 함수 객체가 가지는 prototype 프로퍼티는 이 함수가 생성자로 사용될 때 이 함수를 통해 생성된 객체의 부모 역할을 하는 프로토타입 객체를 가리킨다!
참고
'Dev > JavaScript' 카테고리의 다른 글
함수 리턴 (0) | 2021.04.09 |
---|---|
함수 호출과 this (0) | 2021.04.09 |
함수객체 (0) | 2021.04.07 |
함수정의 (0) | 2021.04.07 |
자바스크립트 데이터 타입 (0) | 2021.04.06 |
Comments