본문 바로가기

자바스크립트-스터디[2021-10-05~완료]

18 함수와 일급 객체

18.1 일급 객체

 

무명의 리터럴로 생성할 수 있다. == 런타임에 생성 가능하다.

변수나 자료구조(객체, 배열) 저장할 수 있다.

함수의 매개변수에 전달할 수 있다.

함수의 반환값으로 사용할 수 있다.

 

 

함수는 전역 함수가 아니고, 함수안에 있는 매개변수도 전역 변수가 아니다.
뭔가 계속해서 집어넣고 집어넣고...

 

함수가 일급 객체??

함수 == 객체  : 동일하게 사용할 수 있다

객체는 값

함수는 값과 동일하게 취급,

변수 할당문, 객체의 프로퍼티 값, 배열의 요소, 함수 호출의 인수, 함수 반환문

리터럴로 정의할 수 있다.,

런타임에 함수 객체로 평가됨

함수 == 객체 일반 객체
호출 가능 호출 못함
고유의 프로퍼티 소유 일반 객체 프로퍼티만 있음

 

 

 

 

18.2 함수 객체의 프로퍼티  : 내부 보기

함수 == 객체

console.dir 메서드를 사용하여 함수 객체의 내부를 들여다보자.

 

함수 객체의 프로퍼티

 

함수의 ::: 프로퍼티 어트리뷰트 확인하기 getOwnPropertyDescriptors(함수이름)

 

 

아래 두개 설명

빨간색: square 함수에는 __proto__ 프로퍼티 없다. 

하늘색: square 함수는 Object.prototype 객체로부터 __proto__ 접근자 프로퍼티를 상속 받는다.

 

 

 

 

 

 

1. arguments 프로퍼티 --> ES3 부터 표준에서 폐지됨 (아 짜증나..나 왜 열심히 팠지)

함수 객체의

 프로퍼티 키(arguments) : 프로퍼티 값(arguments 객체)

arguments 객체 : 함수 호출 시 전달된 인수들(아규먼트)들의 정보를 담고 있는 순회 가능한 유사 배열 객체이다.

함수 내부에서 지역 변수처럼 사용된다.

함수 외부에서 참조할 수 없다.

 

arguments 라는 걸 쓰면 되는거야? 다른 단어도 되나?
응 안돼. arguments라고 써야해
응 안돼. arguments라고 써야해

 

done은 왜있는거야? 그리고 값이 없으면 오히려 done이 false가 되어야하는거 아님?? 왜 반대야????
애를 호출하면 저렇게 나와.

 

 

4. name 프로퍼티

 

 

5. __prote__ 접근자 프로퍼티

모든 객체는 [[prototype]] 내부 슬롯 있음

: 객체지향 프로그래밍 : 상속을 구현

__proto__ 접근자 프로퍼티를 통해 간접적으로 프로토타입 객체에 접근할 수 있음

__proto__로 접근해서 내용 보기, 생성자 , 어떤 프로퍼티 소유?, 프로토타입이니? 프로퍼티가 나열 가능? 문자화, 값..
새로 만든 obj 나 기본으로 있는 Object 객체의 prototype은 같다
obj에 들어있는 a 프로퍼티키를 가지고 있는가? 그렇다. obj안에 __proto__접근자 있는가? 없다. Object한테 상속받은 것이다.

hasOwnProperty('프로퍼티 키'); : 인수로 전달 받은 프로퍼티 키가 

객체 고유의 프로퍼티 키인 경우에만 true, 상속받은 프로토타입입의 프로퍼티키인 경우 false 반환한다.

 

6. prototype 프로퍼티

: 생성자 함수로 호출할 수 있는 함수 객체

== constructor 만이 소유하는 프로퍼티다.

 

일반 객체, 생성자 함수로 호출할 수없는 non-constructor에는 prototype 프로퍼티가 없다. 

 

일반객체: obj 에는 prototype 프로퍼티가 없다. 
일반객체: obj 에서 [[prototype]] 이 Object를 가리키고 있다
생성자 함수인 VegasTracker 에도 [[prototype]]이 보이긴하는데 자체는 아닌거같다?
[[prototype]] 을 눌러보면 constructor이 보인다

 

[[prototype]] 을 눌러보면 일반 객체의 [[prototype]]랑 똑같다.

 

 

 

일반 객체 b 에도 [[prototype]]이 보이긴하는데 자체는 아닌거같다?
[[prototype]] 을 눌러보면 VegasTracker랑  다르다