DeepDive JS - 7일차 // 25 - 26장

2025. 1. 23. 18:27JS

25장 클래스

클래스는 함수, 일급객체임

 

프로토타입을 추상화 한 것이 클래스

 

생성자 함수와의 차이점으로는 

new 없이 안됨

내부 필드 프로퍼티 어트리뷰트 [[Enumerable]] 모두 false임 // 열거 되지 않음.

strict mode 적용
호이스팅시 tdz에 let, const 처럼 tdz에 빠짐
super, extends 상속 지원

 

const person = (function ( ) {                              class person {

//생성자 함수                                                          //생성자

function person (name) {                                    constructor(   )  {

this.name = name ;

}                                                                              }

//프로토타입 메서드                                            //프로토타입메서드

person.prototype.sayHi = function ( ){                 sayHi() {

console.log( ) 

}                                                                                   }

//정적 메서드                                                       //정적 메서드

person.sayHello =  function ( ) {                          satic sayHello  ( ) {     

console.log( )

}                                                                                  }

                                                                                }

return person;

} ());

클래스에서 정의한 메서드 특징
function 축약 표현
클래스에서 메서드 정의할 때는 콤마 필요없음
암묵적으로 strict mode
프로퍼티 어트리뷰트 [[Enumerable]] 값 false // 열거 안됨.
non - constructor 다, 따라서 new 연산자와 함께 호출 할 수 없음

프로퍼티
인스턴스
접근자(get,set)

클래스 필드 정의 (자바에서 클래스 필드를 this 생략 변수처럼 선언, this 생략해도 클래스필드 참조 가능)

ex) class person  ( )  {
name = 'lee'

}
private (은닉, 클래스 내부에서만 참조)

static ( #붙이기) ex) static # num = 10

상속 

extends 클래스 뿐만 아니라 [[constructor]] 내부 메서드 갖는 함수 객체로 평가될 수 있는 모든 표현식 사용 가능 
super 를 호출하면 수퍼클래스의 constructor를 호출한다. 

super 를 참조하면 수퍼클래스의 메서드를 호출 할 수 있다.

 

 

+)메서드 축약 표현으로 정의된 함수만이 [[HomeObject]]를 갖는다.

 [[HomeObject]]를 통해 메서드 자신을 바인딩하고 있는 객체의 프로토타입을 찾을 수 있다.

ex) class Parent {
  greet() {
    console.log("Hello from Parent");
  }
}
class Child extends Parent {
  greet() {
    super.greet(); // [[HomeObject]] 덕분에 Parent의 greet 메서드 호출
  }
}
new Child().greet(); // "Hello from Parent"




26장 ES6 함수의 추가 기능

함수의 구분

일반함수 constructor, prototype, arguments

메서드     super, arguments

화살표함수  없음.

 

메서드

함수 축약표현 

ex) 객체내 bar :  function ( ) { }  -> bar ( ) { } 이런식으로 

constructor 없음. 상속 super에서 언급한 내부 슬롯[[HomeObject]] 가짐. super 키워드 사용 가능. 

 

화살표 함수 

화살표 함수도 일급 객체 이므로, 고차 함수에 인수로 전달 가능 -> 콜백 함수로서 정의 유용

constructor 없음. 인스턴스 생성 안됨, prototype도 생성하지 않음 

ex)

const arrow = () => {};
console.log(arrow.prototype); // undefined

화살표 함수안의 this는 상위 스코프 참조

클래스 내부는 strict mode, 일반함수 this는 일반적으로 undefined
여기서 화살표 함수 사용하면 문제해결.

super :  this와 마찬가지 화살표 함수 내에선 상위 스코프 참조

arguments :  this와 마찬가지 화살표 함수 내에선 상위 스코프 참조

 

(...)Rest파라미터

함수에 전달된 인수들의 목록을 배열로 전달 받음.
유사배열객체에 ...유사배열객체 하면 배열로 전환.

 

매개변수 기본값

매개변수에 초기값이 undefined 일시 초기값을 줄 수 있음
function (x= 0 ,y ) { } 

'JS' 카테고리의 다른 글

DeepDive JS - 11일차 // 37,40,42장  (1) 2025.01.29
DeepDive JS - 10일차 // 34-36,39장  (0) 2025.01.27
DeepDive JS - 6일차 // 20 - 22,24장  (0) 2025.01.22
DeepDive JS - 5일차 // 18 - 19장  (0) 2025.01.21
DeepDive JS - 3일차 // 12,13,23장  (1) 2025.01.17