Search

15장 일급 객체

대분류
언어
서적
소분류
JS DeepDive
태그
일급 객체
함수
프로퍼티
최종 편집 일시
2024/10/27 15:41
생성 일시
2024/01/30 11:47
14 more properties

일급 객체

일급 객체의 조건
무명의 리터럴로 생성 가능 = 런타임에 생성 가능
런타임 : 프로그래밍 언어가 구동되는 환경 Web APIs
setTimeout, DOM, AJAX 등과 같은 비동기 메소드
이벤트 루프와 콜백 큐 보유
변수나 자료구조(객체, 배열 등)에 저장 가능
함수의 매개변수에 전달 가능
함수의 반환값으로 사용 가능
함수는 일급 객체이면서도 호출 가능한 특성 보유, 고유 프로퍼티 소유
일급 객체 : 사용할 때 다른 요소들과 아무런 차별이 없는 객체

함수 객체의 프로퍼티

함수는 객체이므로 함수또한 프로퍼티를 가질 수 있기 때문에 console.dir, Object.getOwnPropertyDescriptor로 확인 가능
console.dir : JSON과 같은 트리 구조로 출력 하고, DOM JS 객체의 전체 표현을 보려고 할 때 유용
Object.getOwnPropertyDescriptor : 특정 프로퍼티에 대한 정보 출력
⇒ 함수 객체의 데이터 프로퍼티에는 arguments, caller, length, name, prototype과 같은 고유의 프로퍼티 소유한다.
Object.prototype객체의 프로퍼티는 모든 객체가 상속받아 사용할 수 있기 때문에  __proto__ 접근자 프로퍼티는 모든 객체가 사용할 수 있다.

인수(arguments) 프로퍼티

arguments 객체(= 함수 객체의 arguements)는 함수 호출 시 전달된 인수(argument)들의 정보를 담고 있는 순회 가능한 유사배열 객체
함수 내부에서 지역 변수처럼 사용 --> 가변 인자 함수를 구현할 때 유용
Function.arguments 처럼 사용하면 X, 지역 변수처럼 사용O
arguments 객체는 인수를 프로퍼티 값으로 소유, 키는 인수의 순서 표시
프로퍼티로 인수 외에도 callee(arugments객체를 생성한 함수), length(인수 개수) 소유
최종적으로는 이 arguments 객체의 번거로움을 해결하기 위해 Rest 파라미터( …args)를 도입

caller 프로퍼티

caller 프로퍼티는 함수 자신을 호출한 함수
ECMAScript 사양에 포함되지 않는 비표준 프로퍼티

length 프로퍼티

함수를 정의할 때 선언한 매개변수의 개수
length !== arguments 객체의 length
length --> 매개변수 개수
arugments length --> 인자(수)의 개수

name 프로퍼티

함수 이름 나타냄.
익명함수인 경우 빈 문자열을 값으로 가짐.
var namedFunc = function foo() {}; console.log(namedFunc.name); // foo
JavaScript
복사

__proto__ 접근자 프로퍼티

[[Prototype]] 내부 슬롯이 가리키는 프로토타입 객체에 접근하기 위해 사용하는 접근자 프로퍼티
모든 객체는 [[Prototype]] 이라는 내부 슬롯을 갖고 __proto__를 통해 접근 가능
hasOwnProperty 메서드
인수로 전달받은 프로퍼티 키가 객체 고유의 프로퍼티 키인 경우에만 true 반환
상속받은 프로토타입의 프로퍼티 키인 경우 false를 반환
// 함수 객체는 prototype 프로퍼티를 소유한다. (function () {}).hasOwnProperty('prototype'); // -> true // 일반 객체는 prototype 프로퍼티를 소유하지 않는다. ({}).hasOwnProperty('prototype'); // -> false
JavaScript
복사

prototype 프로퍼티

함수가 객체를 생성하는 생성자 함수로 호출될 때 생성자 함수가 생성할 인스턴스의 프로포타입 객체
생성자 함수로 호출할 수 있는 함수 객체, constructor만이 소유하는 프로퍼티
일반 객체와 non-constructor 함수는 prototype 프로퍼티X