인프런 커뮤니티 질문&답변
선생님 안녕하세요 질문있습니다.
작성
·
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회독으로는 애매모호했던 것들이 매번 반복해서 볼때마다 하나씩 이해되는 느낌입니다.