강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

이순곤님의 프로필 이미지
이순곤

작성한 질문수

Javascript ES6+ 제대로 알아보기 - 초급

new.target

에로우함수 new.target

작성

·

197

0

function Person (name) {

  const af = n => {

    this.name = n

    console.log(new.target)

  }

  af(name)

}

const p1 = new Person('재남')

const p2 = Person('성훈')

const p2 같은경우는 new연산자를 안써서 기본적으로 외부함수로 객체도 생성이 안되서 내부함수도 new.tartget이 바인딩안되서 외부함수를 보는데 아무것도 없어서 console창에 아무것도 없는건가요?

답변 2

0

정재남님의 프로필 이미지
정재남
지식공유자

1. 그게 아니라 arrow function은 this 바인딩도 무시하고, new.target도 무시합니다.
따라서 arrow function 내부에서 new.target의 값을 찾으려다가 없으니
스코프체이닝상 상위 스코프를 찾아가고, 거기서도 없으니 undefined가 출력되는 겁니다.

2. 네

0

이순곤님의 프로필 이미지
이순곤
질문자

그리고 new.target을 쓰면 장점이

마지막에 추상클래스처럼 흉내 내는거하고 

또 function Person (name) {

  console.log(new.target)

  if (new.target === Person) {

    this.name = name

  } else {

    throw new Error('Person 생성자함수를 new로 호출해야 해요!')

  }

function Android (name) {

  Person.call(this, name)

}

const p1 = new Android('재남봇')

이럴때 call함수 못쓰게 하고 new연산자를 강제 시키는것일까요?

이순곤님의 프로필 이미지
이순곤

작성한 질문수

질문하기