객체는 그냥 복사를 하면 식별자만 더 생길 뿐 새로운 객체를 만들 수 없다.
객체의 참조 특성 때문에 얕은 복사가 되기 때문이다. 객체를 복사하고 싶다면, 또는 비슷한 프로퍼티를 가진 객체들을 만들고 싶다면 생성자 함수를 사용하면 된다.
생성자 함수는 일반 함수와 구별되는 차이점이 있다.
- 기명함수이다. 보통 이름의 첫글자를 대문자로 쓴다.
- this를 사용한다.
- 파라미터가 필수는 아니나, 인스턴스마다 새로운 값을 대입시키고 싶다면 넣을 수 있다.
this를 사용하는 이유는 생성자 함수에서 this가 새롭게 생성되는 인스턴스를 가리키고,
그 인스턴스의 속성과 메소드에 접근할 수 있기 때문이다.
즉, 생성자 함수에서 새로운 프로퍼티나 메소드를 정의하고 싶다면, 앞에 꼭 'this'를 붙여야 한다. 그래야 해당 프로퍼티나 메소드가 생성된 인스턴스의 속성과 메소드에 잘 접근할 수 있다.
다음은 생성자 함수의 예시이다.
function Students(name, age){
this.name = name ;
this.age = age;
this.sayHi = function(){
console.log(`hello my name is ${this.name}`); }}
다음과 같이 인스턴스를 만들고 생성자 함수의 프로퍼티와 메소드를 사용할 수 있다.
const student1 = new Students('hana',14);
console.log(student1.age);
student1.sayHi();