extendClass 함수 구현시 IIFE를 사용하는 것과 그냥 일반 함수를 사용하는 것의 차이가 무엇인지 궁금합니다.
var extendClass1 = (function() {
function Bridge() {}
return function(Parent, Child) {
Bridge.prototype = Parent.prototype;
Child.prototype = new Bridge();
Child.prototyep.constructor = Child;
}
})();
var extendClass2 = function() {
function Bridge() {}
return function (Parent, Child) {
Bridge.prototype = Parent.prototype;
Child.prototype = new Bridge();
Child.prototype.constructor = Child;
}
}
var extendClass3 =function (Parent, Child) {
function Bridge(){};
Bridge.prototype = Parent.prototype;
Child.prototype = new Bridge();
Child.prototype.constructor = Child;
}
위의 extendClass1, 2, 3의 차이가 무엇인지 궁금합니다.
Answer 3
3
extendClass1는 최초 변수를 선언하고 값을 할당하는 시점에 이미 Bridge 함수가 생성되어 클로저로 기억됨에 따라, 이후에 클래스 상속이라는 동작을 수행하고자 할 때마다 '이미 생성된' Bridge 함수를 재활용함으로써 메모리 관리에 이점이 있습니다.
extendClass2는 엄밀히는 아직 클래스 상속 동작을 수행할 수 있는 단계는 아닙니다. 이를 한 번 실행한 결과를 다른 변수에 담았을 때 비로소 클래스 상속이 가능하겠네요.
예를 들어 var extendClass22 = extendClass2(); 라고 하면, 이제 extendClass22는 extendClass1과 동일한 방식으로 동작하게 될 것입니다.
extendClass3은 extendClass1에 대해 설명드린 걸과 정확히 반대의 방식으로 동작하게 됩니다.
즉 클래스상속을 하고자 할 때마다 매번 새로운 Bridge함수를 만들게 되므로 불필요한 메모리를 차지하게 될 것입니다.
0
저도 1,2번 궁금해서 실행해봤는데, 설명해주신대로 해야 정상동작하더라구요. 이부분이 저도 조금 헷갈렸는데, 앞부분에서 설명해주신 함수표현식 강좌 다시보니 명확해 졌습니다.
감사합니다.
인스턴스에서 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
398
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
404
1
기본형/가변형 질문입니당
0
333
0
선생님 그러면 섹션 0만 봐도 무방한가요!?
0
335
1
Hoisting과 environmentRecord에 관한 질문입니다.
1
291
1
안녕하세요, 데이터 변경 질문입니다.
0
328
1

