하루에 한 문제

함수 객체의 기본 프로퍼티 본문

Dev/JavaScript

함수 객체의 기본 프로퍼티

dkwjdi 2021. 4. 7. 01:22

몇 번이나 말했지만 자바스크립트에서 함수는 객체다(매우중요)

하지만 일반 객체와는 다르게 추가로 함수 객체만의 표준 프로퍼티가 정의되어 있다

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 프로퍼티는 이 함수가 생성자로 사용될 때 이 함수를 통해 생성된 객체의 부모 역할을 하는 프로토타입 객체를 가리킨다!

 

참고

book.naver.com/bookdb/book_detail.nhn?bid=7400243

'Dev > JavaScript' 카테고리의 다른 글

함수 리턴  (0) 2021.04.09
함수 호출과 this  (0) 2021.04.09
함수객체  (0) 2021.04.07
함수정의  (0) 2021.04.07
자바스크립트 데이터 타입  (0) 2021.04.06
Comments