• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

Object 생성 방법에 대해 질문입니다.

21.03.14 19:22 작성 조회수 111

0

리터럴 방식 또한 인스턴스를 생성한다는게 이해가 가지 않습니다.

저는 지난강의 때문에 리터럴 방식이 당연히 인스턴스를 생성하지 않는다고 생각했거든요

지난 강의(length값이 반환되는 논리 편)의 예제입니다.

var value = "ABC";

console.log(value.length);

엔진이 value.length 를 만나면 내부에서 new String("ABC")을 하게되며 생성한 인스턴스의 length 값인 3을 반환한다고 하셨는데요.

만약 리터럴이 인스턴스를 생성한다면 굳이 내부에서 new String("ABC")로 또 한번 인스턴스를 생성할 필요가 없지않나요?

그리고 리터럴 방식이 인스턴스가 맞다면 value에 length라든가 이런저런 함수들이 있어야하는데 개발자도구 local 부분에서 value변수는 더이상 전개 불가했습니다. 

어떻게 된건지 궁금합니다..!

답변 1

답변을 작성해보세요.

1

"ABC"는 문자열 값이지 리터럴이 아닙니다. var obj = { }를 Object 리터럴이라하고, var list = [ ]를 Array 리터럴이라고 합니다. 이것은 new Object(), new Array()와 같습니다.

value.split("")일 때 내부에서 String 인스턴스를 만들어 split()를 실행합니다. 왜냐하면 메소드가 속한 오브젝트가 있어야 메소드를 실행할 수 때문입니다. 이때 생성한 인스턴스를 반환합니다.

value.length 형태도 내부에서 인스턴스를 생성합니다. 왜냐하면 오브젝트에 속한 length 값을 반환할 수 있기 때문입니다. Array 오브젝트의 length는 엘리먼트 수를 반환하고 String 오브젝트의 length는 문자 수를 반환합니다. 이때 생성한 인스턴스를 반환하지 않고 값을 반환합니다.