프로퍼티 어트리뷰트

 

내부로직인 내부슬롯, 내부메서드는 직접접근은 안되고 일부에 한해서 간접접근이 가능하다.

[[Prototype]]은 __proto__로 접근이 가능하고, 프로퍼티 속성인 어트리뷰트는 Object.getOwnPropertyDescript ?

로 접근이 가능하다. 둘다 내부슬롯에 해당한다.

 

프로퍼티 속성은 일반적으로 값, 값변경가능 여부, 열거가능 여부, 재정의가능 여부로 구성되어있다.

 

프로퍼티의 종류는 두가지로 일반적인 우리가 아는 키와 값으로 구성된 데이터 프로퍼티와 프로퍼티에 접근해서 데이터를 읽거나 쓸수 있는 접근자 프로퍼티가 있다.

 

접근자 프로퍼티는 구성이 조금 다르다. 값이 없기 때문에 값변경 여부 속성이 빠지고 get, set이라는 속성을 가지고 있다.

get은 데이터프로퍼티에 접근하여 getter 함수를 호출하여 프로퍼티 값을 반환한다. set은 프로퍼티를 저장할 때 setter 함수를 호출하여 프로퍼티를 저장한다. 나머지 열거가능 여부와 재정의가능 여부는 공통적으로 가지고 있다.

 

Object.defineProperty 였나?? 프로퍼티 속성을 정의, 재정의할 수 있다. 인수로 객체, 프로퍼티, 프로퍼티 속성을 받는다.

정의할 때 속성을 생략한다면 가능여부 속성은 false로 값, set, get은  undefined가 된다. 

 

속성 제어

 

확장금지 - 객체.preventExpansion ? 모두 다 가능하지만 프로퍼티 추가가 금지된다.

동봉? - 객체.seal 삭제, 추가, 재정의가 금지 된다.

? - 객체.frozen ? 읽기 외에 모든 것을 금지한다. 

 

 

 

생성자 함수

 

new Object, new 연산자와 Object 생산자 함수를 통해 빈 객체를 만들 수 있다.

Object 말고도 Number, String, Boolean ?? 등등 빌트인 함수로도 가능하다. 

 

 생성자 함수를 쓰는 이유는 동일한 구조의 객체가 많이 필요할 때 객체를 수없이 많이 만들기에는 낭비가 크다.

생성자 함수를 통해 그 낭비를 줄일 수 있다. 

 

this 생선된 빈 객체는 this를 통해 바인딩 된다. 생성자 함수 내에서 this는 생성자 함수를 가리키며 프로퍼티나 메서드를 만들 수도 있다. 만약 생성자 함수가 아니라 일반 함수에서 사용했다면 일반함수를 무시하고 window를 가리켜 전역상태가 된다.  this를 사용한 바인딩시 주의점은 함수가 끝나면 this를 반환한다. 그런데 return을 정의 했다면(원시값 제외) return이 this 대신 반환된다. 

 

 함수 역시 객체이므로 객체의 속성을 다 가진다. 이런 함수와 객체의 큰 차이점은 호출이 가능하다는 점이다. 그러므로 함수는 다른 내부슬롯이 더 있고 내부메서드 역시 [[Call]], [[Construct]]등이 추가되어 있다. [[Call]]은 함수를 호출할 때 호출되며 함수는 호출이 가능하므로 callable은 당연하다. 이런 함수 중 생성자함수 생성 가능 여부를 나태내는 것이 [[Construct]]이다. 생성자 함수를 만들 때는 Call 대신 Constuct가 호출된다. Construct 가능한 것은 함수 정의식, 함수표현식, 클레스 등은 가능하고 non-construct 는 화살표 함수, 축약 메서드가 해당된다. 

 

new.target 생성자 함수인지 아닌지 알려준다. 아니라면 undefined를 반환한다. 

 

 

'진행중 > 백지쓰기[복습]' 카테고리의 다른 글

백지쓰기 7일차  (0) 2022.09.05
백지쓰기 5일차  (0) 2022.08.23
백지쓰기 4일차  (0) 2022.08.21
백지쓰기 3일차  (0) 2022.08.20
백지쓰기 2일차  (0) 2022.08.19

+ Recent posts