Object()와 new Object()의 차이가 뭘까요?
조회수 3334회
Object()는 생성자 함수이고 new 키워드를 붙여서 인스턴스를 생성한다고 알고 있습니다.
그런데 Object() 생성자 함수를 직접 호출해도 new Object()를 사용한것과 같은 결과가 나오는걸로 보이는데요. 혹시 겉으로 보이는것과 다른 둘 사이의 차이점이 있나요?
(어떤 바보가 Object라는 식별자를 사용해서 생성자 함수를 재정의해버리는 경우는 빼고 말이죠)
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가지 방법으로 인스턴스를 만들 수 있습니다.
- 감사합니다. http://tobyho.com/2010/11/22/javascript-constructors-and/ 여기에도 관련 내용이 있네요. 편집요청빌런 2016.7.22 16:08
댓글 입력