클래스 상속 질문입니다.
Person 클래스에서 getName 과 getAge 를 정의할때 Person.prototype안에 정의하셨는데, 그렇게 해야하는 특별한 이유가 있는지요 ?
function Person(name, age) {
this.name = name || 'noname';
this.age = age || 'noage';
this.getName = function(){ return this.name; }
this.getAge = function(){ return this.age; }
}
이렇게 Person 클래스안에 바로 정의해서 쓰면 안되는 건가요 ?
직접 해보니까 메소드 상속은 똑같이 이루어 지고 해당 메소드를 바로 볼 수 있냐 아니면 prototype을 타고 위로 올라가서 봐야하냐의 차이밖에 없는거 같은데...
Answer 2
5
말씀하신 대로 그정도의 차이밖에 없습니다. 그런데 그 차이가 매우 큰 결과를 초래합니다.
Person 클래스 안에서 메소드들을 직접 정의할 경우
var tom = new Person('Tom', 30);
var jack = new Person('Jack', 35);
var steve = new Person('Steve', 25);
이렇게 사람 인스턴스를 세 개 만들고 보면,
tom, jack, steve 객체 모두가 저마다 getName, getAge메소드를 직접 들고 있게 됩니다. 똑같은 함수가 여기저기 만들어진 것이죠.
인스턴스를 1000개를 생성해야 하는 상황에선 어떨까요? 메소드가 2000개가 됩니다.
인스턴스 고유의 속성을 나타내기 위해 메모리를 차지하는 것은 불가피하겠지만, 동일한 메소드를 수천개씩 만드는 것은 몹시 비효율적이겠죠. 그보다는 prototype으로 한단계 올려서 한 번만 만들고, 이를 인스턴스들이 제각각 활용하는 것이 훨씬 좋은 방법일 것입니다.
인스턴스에서 prototype 프로퍼티에 직접 접근해야하는 이유
0
59
1
setTimeout 에서 this
0
81
1
2강부터 영상이 나오지 않습니다.
0
175
1
자바스크립트 주석에 이상한 점이 있어서 문의드립니다.
0
219
2
return 문 안에 여러 함수가 존재하는 것이 이해되지 않습니다.
1
259
1
클래스 static 멤버
1
253
1
실행컨텍스트와 스택프레임
2
567
1
프로토타입으로 상속할때 브릿지 사용 이유
0
320
1
호이스팅 관련 질문
1
335
1
책 66p. 예제 3-2 질문입니다.
0
356
1
강의 내용 10:58 캡슐화 질문입니다.
1
399
1
강의 내용 5:10 질문입니다.
1
422
2
전역 공간에서의 this
0
426
2
18:31 addEventListener의 this
1
480
1
outerEnvironmentReference 질문
1
372
1
실행 컨텍스트와 클로저에 대해 질문드립니다.
1
448
1
Object.prototype.constructor의 [[prototype]] ?
1
658
1
함수를 값으로 할당할 때
2
457
1
15:54 'ddd' 사라지는 오류?
4
375
1
프로토타입 getPrototypeOf(instance).constructor(n,a) 질문입니다.
1
405
1
기본형/가변형 질문입니당
0
333
0
선생님 그러면 섹션 0만 봐도 무방한가요!?
0
336
1
Hoisting과 environmentRecord에 관한 질문입니다.
1
292
1
안녕하세요, 데이터 변경 질문입니다.
0
329
1

