• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

선생님 안녕하세요 질문있습니다.

22.01.12 12:13 작성 조회수 91

0

좋은 강의 잘 보고 있습니다. 감사합니다.

25초쯤에 Object 오브젝트 형태는 인스턴스를 생성할 수 없다고 하셨는데.. 이전 강의 Object 오브젝트(ES3) 1번 강의에서는 { } 리터럴이나 new 연산자도 인스턴스를 생성한다고 하셨습니다. new연산자를 사용했으므로 abc인스턴스라고 부르고 아래의 obj는 오브젝트로 부른다고 하셨었는데요..(아래 사진)

이 부분이 약간 헷갈립니다 ㅠ 말이 다른건지.. 제가 이해를 잘 못하고 있는건지.. 오브젝트와 인스턴스를 구분하기위해서 저렇게 말씀하신걸로 이해하면 될까요? 

답변 1

답변을 작성해보세요.

1

많이 생각한 좋은 질문입니다.

var obj = {} 형태처럼 Object 리터럴을 작성하면, 자바스크립트 엔진이 코드를 해석하면서 인스턴스를 생성합니다. 즉, 개발자가 new 연산자로 인스턴스를 만드는 것과 같은 것을 엔진이 합니다.

아래 코드는 Object 리터털에 함수를 작성한 형태이며, 이 형태는 이미 sports 인스턴스를 생성한 상태이므로 new sports()로 인스턴스를 생성하지 못합니다.

new sports()를 실행하면 에러가 발생하며 이유는, new 연산자가 { } 안의 constructor를 호출하게 되는데 { }에 constructor가 없기 때문입니다. 
sports.getItem() 형태로 작성해야 getItem() 함수가 호출됩니다. 이 형태를 강좌에서 메소드가 아니라 함수로 부릅니다.

var sports = {
  item: "축구",
  getItem: function(){
    return this.item;
  }
};
console.log(sports.getItem());

 

강민성님의 프로필

강민성

질문자

2022.01.12

아.. 선생님 감사합니다. 이미 인스턴스가 있기때문에 다시 인스턴스를 생성하지 못한다는 뜻이였군요. 1회독으로는 애매모호했던 것들이 매번 반복해서 볼때마다 하나씩 이해되는 느낌입니다. 

예, 좋습니다. 반복이 지름길입니다. 볼 때마다 생각을 더 넓고 깊게 하게 됩니다.