재훈재훈
prototype 프로퍼티 본문
prototype 프로퍼티
모든 함수에는 prototype 프로퍼티가 있는데, 함수가 정의될 때 만들어지고 초기화됨.
prototype에 저장된 속성들은 생성자를 통해서 객체가 만들어질 때 그 객체에 연결됨.
프로토타입 객체는 생성자 함수와 연결되고, 이 생성자 함수를 통해서 생성되는 객체들은
생성자 함수와 연결된 프로토타입 객체의 프로퍼티들을 똑같이 상속한다.
프로토타입 객체를 사용하면 메모리 사용량을 줄일 수 있고, 프로토타입 객체 내용을 수정하면
기존 객체 내용도 같이 변경된다는 장점이 있다.
function
Ultra(){}
Ultra.prototype.ultraProp =
true
; // Ultra 함수 객체에서 ultraProp 프로퍼티 사용할 수 있다.
function
Super(){}
Super.prototype =
new
Ultra(); // Super 함수 객체에서 Ultra() 프로퍼티를 사용할 수 있다.
function
Sub(){} // Sub 함수 객체는 Super() 프로퍼티를 사용할 수 있다.
Sub.prototype =
new
Super();
var
o =
new
Sub(); // Sub 함수 객체 생성
console.log(o.ultraProp); // 결과는 true
function Rectangle(x, y, w, h) {
this.pointX = x;
this.pointY = y;
this.width = w;
this.height = h;
}
Rectangle.prototype.toString = function() {
return 'Rectangle : { pointX : ' + this.pointX + ', pointY : ' + this.pointY
+ ', width : ' + this.width + ', height : ' + this.height + ' }';
};
Rectangle.prototype.area = function() {
return this.width * this.height;
};
var rect1 = new Rectangle(100, 120, 20, 30);
document.writeln('rect1: ' + rect1 + '<br/>');
document.writeln('rect1.area(): ' + rect1.area() + '<br/>');
document.writeln('<br/>');
----------------------------------------------------------------------------------------------------------------------
주로 멤버 변수는 생성자 함수에, 메서드는 프로토타입 객체에 정의하는 것 같다.
Q. 함수를 정의할 때
프로퍼티를 정의하면 되지 않나? 왜 굳이 이렇게 번거로운 과정을 거쳐야 하나?
'Computer Engineering > JavaScript' 카테고리의 다른 글
상속 (0) | 2018.04.07 |
---|---|
constructor 프로퍼티 (0) | 2018.04.07 |
클로저 (0) | 2018.04.07 |
주요 연산자 그리고 제어문 (0) | 2018.04.07 |
여러가지 리터럴 (0) | 2018.04.07 |