string 프리미티브랑 String 오브젝트에 대하여 MDN을 보다가 생긴 궁금증인데


String이 생성자로 불리는 컨텍스트에서는 String 오브젝트를 생성해서 반환한다고 되어있고

String이 함수로 불리는 컨텍스트에서는 string 프리미티를 반환한다고 되어 있더라고.


즉 String이라는 녀석도 function 오브젝트일거 같은데, 어떻게 그 안에서 new로 호출된 생성자인지 그냥 함수인지 어떻게 구별하지?

안에서

let str = "100";

new String(str); // String 오브젝트 반환
String(str); // string 프리미티브 반환.

function String(str) {
    // 여기서 어떻게 String이 함수로 불렸는지 생성자로 불리는 알 수 있나?
}