공부/JavaScript && jquery
함수 객체의 기본 프로퍼티
NineOne
2021. 4. 10. 18:39
자바스크립트에서 계속 강조하는 것은 함수 역시 객체이다. 이것은 함수 역시 일반적인 객체의 기능에 추가로 호출됐을 때 정의된 코드를 실행하는 기능을 가지고 있다는 것이다. 또한, 일반 객체와는 다르게 추가로 함수 객체만의 표준 프로퍼티가 정의되어 있다.
function add(x, y) {
return x + y;
}
console.dir(add);
- 모든 함수가 length와 prototype 프로퍼티를 가져야 한다.
- 몇 개의 프로퍼티는 간단하게 살펴보고 가자.
- caller : 자신을 호출한 함수를 나타낸다. 위 코드에서는 add() 함수를 호출하지 않았으므로 null 값이 나왔다.
- arguments : 함수를 호출할 때 전달된 인자값을 나타내는데 현재는 add() 함수가 호출된 상태가 아니므로 null
- __proto__ : 모든 자바스크립트 객체는 자신의 프로토타입을 가리키는 [[prototype]]라는 내부 프로퍼티를 가진다.
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 프로퍼티와 [[Prototype]]
두 프로퍼티는 모두 프로토타입 객체를 가리킨다는 점에서 공통점을 가지고 있다.
하지만 관점의 차이가 있다. 모든 객체에 있는 내부 프로퍼티인 [[Prototype]]는 객체 입장에서 자신의 부모 역할을 하는 프로토타입 객체를 가리키는 반면에, 함수 객체가 가지는 prototype 프로퍼티는 이 함수가 생성자로 사용될 때 이 함수를 통해 생성된 객체의 부모역할을 하는 프로토타입을 가리킨다.
//MyFunction() 함수 정의
function MyFunction() {
return true;
}
console.dir(MyFunction.prototype);
console.dir(MyFunction.prototype.constructor);
이렇듯 함수 객체와 프로토타입 객체는 서로 밀접하게 연결되어 있다.
출처
인사이드 자바스크립트(송형주, 고현준 지음) - 한빛미디어