[JS] new 생성자

leo3179·2022년 3월 20일
0
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"
  1. new를 이용해 p1에 리턴값을 미리 객체로 부여해줍니다
  2. 함수 Person()this로 객체 내부에 introduce라는 키값과 name이라는 밸류값을 바인딩하는 함수입니다
  3. Person()자체에 리턴값은 존재하지 않습니다 따라서 이 함수 자체를 let으로 식별자와 바인딩할 시에 값은 undefinded가 뜨게 됩니다
  4. 이 함수를 사용하기 위해서는 return 값을 가진 Person() 내부의 함수를 찾아야겠죠
  5. 우리는 p1자체에 이미 parameter로 'egoing1'이 들어가 있는것을 알 수 있습니다
  6. 따라서 그냥 p1.intoduce()를 붙여서 리턴값을 불러와 다음과 같이 활용하면 됩니다

이렇게 new는 식별자에 함수의 객체값을 부여해주는 생성자라고 할 수 있습니다
Date()를 사용할 때 new를 쓰는 이유도 바로 Date()자체가 객체생성함수이며 객체를 이용해 다양한 값을 돌려줄 수 있기 때문입니다

a=new Date()
a.getDate()
a.get
a.getFullYear()

여기를 참조

profile
개발 공부중

0개의 댓글