728x90
일급 객체
- 일급 객체의 조건
- 무명의 리터럴로 생성 가능(런타임에 생성 가능)
- 변수나 자료구조 등에 저장 가능
- 함수의 매개변수에 전달 가능
- 함수의 반환값으로 사용 가능
==-> JS의 함수는 위 조건을 모두 만족하므로 일급 객체==
따라서, 함수를 객체와 동일하게 사용가능하며 값을 사용하는 곳이면 어디든 리터럴로 정의가능, 함수형 프로그래밍을 가능케 함
함수 객체의 프로퍼티
- 함수 객체 고유 프로퍼티
arguments, caller, length, name, prototype (데이터 프로퍼티)
__proto__ (접근자 프로퍼티) - arguments 프로퍼티(유사 배열 객체)
함수 내부에서 지역 변수와 같이 사용(함수 외부에서 참조X)
모든 인수는 암묵적으로 arguments 객체의 프로퍼티로 보관ㅂ
인수를 프로퍼티 값으로, 키는 인수의 순서를 나타냄
==-> 함수 호출 시 인수 개수를 확인할 때 유용하게 사용== function sum() { let res = 0; for(let i = 0; i < arguments.length; i++){ res += arguments[i]; } } console.log(sum()); // 0 console.log(sum(1,2,3)) // 6- length 프로퍼티
함수를 정의할 때 선언한 매개변수의 개수
==->arguments 객체의 length와 함수 객체의 length는 서로 다를 수 있음!== function foo() { console.log(foo.length) // 0 } function foo(1, 2) { console.log(foo.length) // 2 } function foo(1, 2, 3, 4, 5) { console.log(foo.length) // 5 }- name 프로퍼티
함수의 이름을 나타냄 var namedFunc = function foo() {}; console.log(namedFunc.name); // foo- __proto__ 프로퍼티
모든 객체는 [[prototype]] 이라는 내부 슬롯을 가짐
-> 상속을 구현하는 프로토타입 객체를 가리킴
프로토타입 객체에 접근하기 위해 사용하는 접근자 프로퍼티 const obj = { a : 1}; console.log(obg.__proto__ === object.prototype); // true- prototype 프로퍼티
생성자 함수로 호출할 수 있는 함수 객체 즉, Constructor만 소유-> 생성자 함수가 생성할 인스턴스의 프로토타입 객체를 가리킴 (function () {}).hasOwnProperty('prototype'); // true