19-2. 상속과 프로토타입

똑같은 메서드를 가지는 객체가 여러개일때,

  1. 하나의 방법으로는 생성자 함수를 생성할 수 있고,
// 생성자 함수
function Circle (radius) {
	this.radius = radius,
	this.getArea = function (radius) {
		return Math.PI * radius ** 2;
	}
}

const circle1 = new Circle(1);
const circle2 = new Circle(2);
  1. 다른 방법으로는 프로토타입를 사용하는것
    1. 즉, 메서드가 똑같은 걸 필요로 하면 위에다가 올려서 상속받아서 쓰겠다
// 생성자 함수
function Circle(radius) {
	this.radius = radius;
}

/*
	Circle 생성자 함수가 생성한 모든 인스턴스가 
	getArea 메서드를 공유해서 사용할 수 있도록 
	프로토타입에 추가한다.
 */
Circle.prototype.getArea = function () {
	return Math.PI * this.radius ** 2;
}

// 인스턴스 생성
const circle1 = new Circle(1);
const circle2 = new Circle(2);

// getArea는 Circle를 가지고 있고 circle1은 참조만 하고 있지만 , 자신의 메서드인것처럼 호출할 수 있음
circle1.getArea(); // 3.131592...

19-3. 프로토타입 객체

[1] proto 는 접근자 프로퍼티

[2] proto 접근자 프로퍼티는 상속을 통해 사용

[3] proto 접근자 프로퍼티를 이용해서 prototype에 접근하는 이유?

: 순환참조가 되면 안되기 때문에! (순환참조가 되면 종점이 없기 때문에)

[4] 코드 내에서 proto 접근자 프로퍼티를 사용하는 것을 권장하지 않음

: proto 는 표준이긴 하나 권장하지 않으며 사라질 예정임

대신에 .getPrototypeOf 를 사용해라