Object()와 new Object()의 차이가 뭘까요?


Object()는 생성자 함수이고 new 키워드를 붙여서 인스턴스를 생성한다고 알고 있습니다.

그런데 Object() 생성자 함수를 직접 호출해도 new Object()를 사용한것과 같은 결과가 나오는걸로 보이는데요. 혹시 겉으로 보이는것과 다른 둘 사이의 차이점이 있나요?

(어떤 바보가 Object라는 식별자를 사용해서 생성자 함수를 재정의해버리는 경우는 빼고 말이죠)


  • 어떤 언어에서 테스트를 해본건가요? 언어 설계 당시 객체지향설계를 반영한 경우는 대부분 안될텐데요..    허대영(Daeyoung Heo)   2016.7.21 22:46     
  • 자바스크립트입니다. 테스트는 브라우저 개발자 도구로 했구요.    처제의일기   2016.7.22 00:43     
조회수 168


1 답변


좋아요
1
싫어요
채택취소하기

Object()는 생성자를 호출하고, new를 붙여야 인스턴스가 생성되는건 맞습니다. 하지만 생성자에서 다음예의 Object2와 같이 처리를 해 주면 Object2()만 호출해도 인스턴스를 생성할 수 있습니다.

function Object1 () {
    //this.color = "red";
}

function Object2(){
   if (!(this instanceof Object2)){
        return new Object2();
   }
}

var object1WithNew = new Object1();
var object1WithoutNew = Object1();
console.log("object1WithNew: "+object1WithNew);
console.log("object1WithoutNew: "+object1WithoutNew);

var object2WithNew = new Object2();
var object2WithoutNew = Object2();
console.log("object2WithNew: "+object2WithNew);
console.log("object2WithoutNew: "+object2WithoutNew);

위 코드를 실행해 보면 생성자에서 별도 처리를 해 주지 않은 Object1은 Object1()으로 인스턴스가 생성이 되지 않지만, Object2는 Object2()만 호출해도 Object2 인스턴스가 생성되면서 아래와 같이 출력됩니다.

object1WithNew: [object Object]
object1WithoutNew: undefined
object2WithNew: [object Object]
object2WithoutNew: [object Object]

Object도 이처럼 생성자에서 별도로 처리를 해 주고 있는걸로 보이네요. 참고로 Object는

  • var obj = new Object();
  • var obj = Object();
  • var obj = {};

3가지 방법으로 인스턴스를 만들 수 있습니다.

  • 2016년 07월 22일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close