Constructor
)를 new 연산자와 함께 호출하면,Constuctor
에서 정의된 내용을 바탕으로 새로운 instance
가 생성instance
에는 __proto__
라는 프로퍼티가 자동으로 부여되는데,Constructor
의 prototype
이라는 프로퍼티를 참조(복제)var Person = function (name) {
this._name = name;
};
Person.prototype.getName = function() {
return this._name;
};
Person
의 인스턴스는 __proto__
프로퍼티를 통해 getName
을 호출 가능const user = {
name: 'gonasooc',
job: 'progammer',
};
user
는 user.__proto__
라는 내부 프로퍼티를 통해 Object 생성자 함수가 미리 가지고 있던 Object.prototype
과 연결Object.prototype
이 프로토타입 객체Array.prototype
이 프로토타입 객체new Array()
의 디폴트 생성자가 내부에서 동작해서 해당 Array.prototype
이 해당 배열의 프로토타입이 되고, 우리는 그걸 통해 Array.prototype.map()
과 같은 배열과 관련된 내장함수를 사용할 수 있게 됩니다. 이런 내부 동작은 메모리 효율을 높여주는 장점으로 작용합니다.new Array()
생성자를 통해 배열을 선언하는 방식과 객체 리터럴을 이용해 선언하는 방식이 속도적으로 큰 차이는 없으나, new Array()
등을 통한 생성은 직관적이지 않다는 게 가장 큰 차이라고 볼 수 있습니다. 결국은 사람이 하는 일이기에 휴먼 에러를 줄이는 것도 중요한 일이라서 객체 리터럴을 통한 방식을 주로 사용하게 되었다고도 볼 수 있습니다.