생일을 챙겨주는 게 부끄러웠던 현석님(ㅎㅎ)
6.2.3 프로토타입 & 6.3.2 상속
MDN 의 예제이다.
게터
인스턴스 메서드
정적 메서드
인스턴스 필드
정적 필드
9.1 클래스와 프로토타입
// 단순한 자바스크립트 클래스 - 정의
function range(from, to) {
let r = Object.create(range.methods);
r.from = from;
r.to = to;
return r;
}
// 단순한 자바스크립트 클래스 - 사용
let r = range(1,3);
9.2 클래스와 생성자
// 생성자(new 로 호출)를 사용한 클래스 - 정의
function Range(from, to) {
this.from = from;
this.to = to;
}
// 사용
let r = new Range(1,3);
클래스 이름은 관습적으로 대문자로 시작한다.
new와 함께 Range() 생성자를 호출했으므로 새 객체를 생성하기 위해 Object.create()를 호출하거나 다른 동작을 취할 필요가 없다.
9.3 class 키워드를 사용하는 클래스
// 정의
class Range {
constructor(from,to) {
this.from = from;
this.to = to;
}
// 사용
let r = new Range(1,3);
// 함수
let squre = function (x) { reutrn x*x } ;
squre(3); // => 9
// 클래스
let Squre = class { constructor(x) { this.area = x*x };
new Squre(3).area // => 9
그외에 class 키워드를 사용해 클래스 생성시 중요한 점:
1) class 선언의 바디는 use strict 안써도 스트릭 모드다.
2) class 선언은 함수 선언과 달리 호이스팅 되지 않는다.
prototype 프로퍼티를 갖는 객체는 비교적 적다는 겁니다.(p.154)
=> 왜지? 함수 같은 경우는 모두 Object.prototype 을 가지게 되는 것 아닌가?
⛏ 더 파보자 (직접 해보기)
prototype 프로퍼티를 갖는 객체는 비교적 적다는 겁니다.(p.154)
=> 왜지? 함수 같은 경우는 모두 Object.prototype 을 가지게 되는 것 아닌가?
저도 궁금하네요 😵💫😵💫