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

조회수 2593회

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

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

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

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

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가지 방법으로 인스턴스를 만들 수 있습니다.

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.