function Person(){} let p= Person()
이렇게
let
으로 함수를 호출할 시
여기서 p의 리턴값은undefined
가 나오게 됩니다
Person()함수의 return값이 설정되어있지 않기 때문이죠
function Person(){} new p= Person()
그러나 이렇게 new로 함수를 호출할 시
여기서 p의 리턴값은
Person { __proto__: { constructor: ƒ Person() } }
이렇게 객체타입으로 나옵니다
같은 코드지만new
를 사용하면 P는 새로운 객체를 생성해 리턴값으로 돌려줍니다
이를 이용해 다음과 같은 코드 예시를 보면
function Person(name) { this.name = name; this.introduce = function () { return 'My name is ' + this.name; }; } let p1 = new Person('egoing'); document.write(p1.introduce() // "My name is egoing"
new
를 이용해p1
에 리턴값을 미리 객체로 부여해줍니다- 함수
Person()
은this
로 객체 내부에introduce
라는 키값과name
이라는 밸류값을 바인딩하는 함수입니다Person()
자체에 리턴값은 존재하지 않습니다 따라서 이 함수 자체를 let으로 식별자와 바인딩할 시에 값은undefinded
가 뜨게 됩니다- 이 함수를 사용하기 위해서는 return 값을 가진
Person()
내부의 함수를 찾아야겠죠- 우리는
p1
자체에 이미 parameter로 'egoing1'이 들어가 있는것을 알 수 있습니다- 따라서 그냥
p1
에.intoduce()
를 붙여서 리턴값을 불러와 다음과 같이 활용하면 됩니다
이렇게 new는 식별자에 함수의 객체값을 부여해주는 생성자라고 할 수 있습니다
Date()
를 사용할 때 new를 쓰는 이유도 바로Date()
자체가 객체생성함수이며 객체를 이용해 다양한 값을 돌려줄 수 있기 때문입니다a=new Date() a.getDate() a.get a.getFullYear()
여기를 참조