강의

멘토링

커뮤니티

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

강민성님의 프로필 이미지
강민성

작성한 질문수

자바스크립트 비기너: 튼튼한 기본 만들기

2. 자바스크립트 객체 형태, JS의 OOP 구현 방법, prototype 형태/연결

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

작성

·

205

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());

 

강민성님의 프로필 이미지
강민성
질문자

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

김영보님의 프로필 이미지
김영보
지식공유자

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

강민성님의 프로필 이미지
강민성

작성한 질문수

질문하기