- 프로토타입
: 자바스크립트에서(모 JAVA도 같지만) 생성자를 통해서 객체를 생성할때
속성은 각기 다르지만, 속성값으로 실행되는 메서드(Method)는 처리구문은 같다.
만약 다루는 객체의 수가 1,000개의 객체라면 생성자 안에 있는 메서드도 1,000번을 생성해야 한다.
메모리를 쓸데없이 잡아먹는 굉장히 비효율적인 일이다.
EX)
<script>
// 생성자
var Student = function (name, korean, math, english, science) {
// 속성
this.이름 = name;
this.국어 = korean;
this.수학 = math;
this.영어 = english;
this.과학 = science;
// 메서드
this.getSum = function () { return this.국어 + this.수학 + this.영어 + this.과학; };
this.getAvg = function () { return this.getSum() / 4; };
this.toString = function () { return this.이름 + '\t' + this.getSum() + '\t' + this.getAvg(); };
};
</script>
getSum(), getAvg(), toString() 는 같은일을 하는 메서드인데 객체생성마다 발생하는문제를 해결하기위해
'프로토타입(Prototype)' 이라는 공간에 넣고 공통으로 사용하는 것이다.
EX)
// 생성자
var Student = function (name, korean, math, english, science) {
// 속성
this.이름 = name;
this.국어 = korean;
this.수학 = math;
this.영어 = english;
this.과학 = science;
};
Student.prototype.getSum = function () {
return this.국어 + this.수학 + this.영어 + this.과학;
};
Student.prototype.getAvg = function () {
return this.getSum() / 4;
};
Student.prototype.toString = function () {
return this.이름 + '\t' + this.getSum() + '\t' + this.getAvg();
};
var student = new Student('최우철', 90, 90, 90, 90);
alert(student.getSum());
alert(student.getAvg());
alert(student.toString());
</script>
* 프로토타입은 우리가 만드는 것이 아니다. 함수 안에 자동으로 만들어지는 배열 arguments 와 마찬가지이다.
그냥 가져다 쓰면되는거...같다(?)