컴퓨터 프로그래밍 언어 디자인에서, 일급 객체(영어: first-class object)란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 보통 함수에 매개변수로 넘기기, 수정하기, 변수에 대입하기와 같은 연산을 지원할 때 일급 객체라고 한다
일급객체 조건
함수가 일급객체라는건 함수를 객체처럼 사용할수있다
일반 객체는 호출불가능하나 함수객체는 호출가능, 고유의 프로퍼티 소유함
proto는 접근자 프로퍼티, Object.prototype 객체 프로퍼티 상속받음. (모든 객체가 상속 받아 사용가능)
함수 객체의 arguments프로퍼티 값은 arguments객체. 함수 내부에서 지역변수처럼 사용됨
함수정의할때 선언한 매게 변수는 내부 변수와 동일하게 취급, 함수 호출시 암묵적으로 매개변수 선언 후 undefined로 초기화된 이후 인수가 할당됨.
arguments객체를 순회 가능한 자료인 이터러블로 만들기위한 프로퍼티
자바스크립트는 매개변수의 개수, 함수 호출시 인수개수 확인하지 않음. 확인을 위해 사용하는게 argument 객체 (매개변수 개수 확정할수 없는 가변 인자 함수 구현시 유용 ) arugments객체는 객체 배열 행태로 인자 담고 있으나 실제 배열 아닌 유사 배열 객체임(array like object) → length 프로퍼티 가진 객체.
array-like object 는 배열이 아니라서 메서드 사용할때 간접 호출해야함 Function.prototype.call
Function.prototype.apply
mdn called :출처
비표준 프로퍼티.. 자신을 호출한 함수 가르킴
선언한 매개변수 개수 가르킴 이때 arguments 객체의length는 인자의 개수를, 함수 객체의 length 는 프로퍼티 매개변수 개수를 가르킴
함수이름을 나타냄 ES5, ES6 에서 동작 다르니 주의! ES5에서는 빈 문자열을 갖으나 ES6는객체를 가리키는 식별자를 값으로 갖음
함수를 호출할때는 함수 이름아닌 객체를 가르키는 식별자로 호출한다
[[Prototype]]이라는 내부 슬롯을 갖고,내부슬롯은 객체지향 프로그래밍의 상속 구현하는 프로토타입 객체를 가르킴
즉,proto 내부 슬롯이 가리키는 프로토 타입 객체에 접근하기위해 사용하는 접근자 프로퍼티임
생성자 함수로 호출할수있는 객체, constructor만이 소유하는 프로퍼티. Non-constructor에는 prototype 프로퍼티 없음.