Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

재훈재훈

prototype 프로퍼티 본문

Computer Engineering/JavaScript

prototype 프로퍼티

jaehoonx2 2018. 4. 7. 17:48

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