@@ -193,5 +193,247 @@ console.log(me instanceof Person); // true
193193 - μμ ν΄λμ€μμ constructor λ₯Ό μ μΈνμ§ μμΌλ©΄ λΆλͺ¨μ constructor λ₯Ό λ°λΌλ΄
λλ€.
194194 - κ·Έλ¬λ μμ ν΄λμ€μμ constructor λ₯Ό μ μΈνμμλ super () ν€μλλ₯Ό μ¬μ©νμ§ μλλ€λ©΄ μ°Έμ‘° μλ¬κ° λ°μν©λλ€.
195195
196+ super ν€μλλ μμ΄ λ§μ λ¨μμ λΆλ¦¬ν©λλ€.
197+
198+ <br>
199+
200+ ## super ν€μλ
201+ > super ν€μλλ ν¨μμ²λΌ νΈμΆνκ±°λ thisμ κ°μ΄ μλ³μμ²λΌ μ°Έμ‘°ν μ μλ νΉμν ν€μλμ
λλ€.
202+
203+ super ν€μλλ μλμ κ°μ΄ λμν©λλ€.
204+ 1. superλ₯Ό **νΈμΆ**νλ©΄ μνΌ ν΄λμ€μ constructor()λ₯Ό νΈμΆν©λλ€.
205+ 2. superλ₯Ό **μ°Έμ‘°**νλ©΄ μνΌ ν΄λμ€μ λ©μλλ₯Ό νΈμΆν μ μμ΅λλ€.
206+
207+ μμΈν μμλ³ΌκΉμ?
208+
209+ <br>
210+
211+ ### super νΈμΆ
212+ > new μ°μ°μμ ν¨κ» μλΈ ν΄λμ€λ₯Ό νΈμΆνλ©΄μ μ λ¬ν μΈμλ super νΈμΆμ ν΅ν΄ μνΌ ν΄λμ€μ constructor()μ μ λ¬λ©λλ€.
213+
214+ μνΌ ν΄λμ€μμ μΆκ°ν νλ‘νΌν°μ μλΈ ν΄λμ€μμ μΆκ°ν νλ‘νΌν°λ₯Ό κ°λ μΈμ€ν΄μ€λ₯Ό μμ±νλ€λ©΄ μλΈ ν΄λμ€μ constructorλ₯Ό μλ΅ν μ μμ΅λλ€.
215+
216+ λν new μ°μ°μμ ν¨κ» μλΈ ν΄λμ€λ₯Ό νΈμΆνλ©΄μ μ λ¬ν μΈμλ₯Ό μνΌ ν΄λμ€μ constructorμ super ν€μλλ₯Ό ν΅νμ¬ μ λ¬ν μ μμ΅λλ€.
217+ ```js
218+ // μνΌ ν΄λμ€
219+ class Base {
220+ constructor (a , b ) { // β£
221+ this .a = a;
222+ this .b = b;
223+ }
224+ }
225+
226+ // μλΈ ν΄λμ€
227+ class Derived extends Base {
228+ // μ묡μ μΌλ‘ constructorκ° μ μλμ§λ§ μ§μ μ
λ ₯ν μ μμ΅λλ€.
229+ // constructor(...args) { super(...args); }
230+ constructor (a , b , c ) {
231+ super (a, b);
232+ this .c = c;
233+ }
234+ }
235+
236+ const derived = new Derived (1 , 2 , 3 );
237+ console .log (derived); // Derived {a: 1, b: 2, c: 3}
238+ ` ` `
239+
240+ μ΄ λ μ£Όμμ¬νμ μλμ κ°μ΅λλ€.
241+ 1. μλΈ ν΄λμ€μμ constructorλ₯Ό μλ΅νμ§ μλ κ²½μ°, μλΈ ν΄λμ€μ constructorμμ λ°λμ superλ₯Ό νΈμΆν΄μΌ ν©λλ€.
242+ ` ` ` js
243+ class Base {}
244+
245+ class Derived extends Base {
246+ constructor () {
247+ // ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor
248+ console .log (' constructor call' );
249+ }
250+ }
251+
252+ const derived = new Derived ();
253+ ` ` `
254+
255+ <br>
256+
257+ 2. μλΈ ν΄λμ€μ constructorμμ superλ₯Ό νΈμΆνκΈ° μ μ thisλ₯Ό μ°Έμ‘°ν μ μμ΅λλ€.
258+ ` ` ` js
259+ class Base {}
260+
261+ class Derived extends Base {
262+ constructor () {
263+ // ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor
264+ this .a = 1 ;
265+ super ();
266+ }
267+ }
268+
269+ const derived = new Derived (1 );
270+ ` ` `
271+
272+ <br>
273+
274+ 3. superλ λ°λμ μλΈ ν΄λμ€μ constructorμμλ§ νΈμΆν΄μΌ ν©λλ€. μλΈ ν΄λμ€κ° μλ ν΄λμ€μ constructorλ ν¨μμμ superλ₯Ό νΈμΆνλ©΄ μλ¬κ° λ°μν΄μ.
275+ ` ` ` js
276+ // μνΌ ν΄λμ€
277+ class Base {
278+ constructor (name ) {
279+ this .name = name;
280+ }
281+
282+ sayHi () {
283+ return ` Hi! ${ this .name } ` ;
284+ }
285+ }
286+
287+ // μλΈ ν΄λμ€
288+ class Derived extends Base {
289+ sayHi () {
290+ // super.sayHiλ μνΌ ν΄λμ€μ νλ‘ν νμ
λ©μλλ₯Ό κ°λ¦¬ν΅λλ€.
291+ return ` ${ super .sayHi ()} . how are you doing?` ;
292+ }
293+ }
294+
295+ const derived = new Derived (' Lee' );
296+ console .log (derived .sayHi ()); // Hi! Lee. how are you doing?
297+ ` ` `
298+
299+ <br>
300+
301+ ### super μ°Έμ‘°
302+ > superλ μμ¬μ μ°Έμ‘°νκ³ μλ λ©μλκ° λ°μΈλ©λ κ°μ²΄μ νλ‘ν νμ
μ κ°λ¦¬ν΅λλ€.
303+
304+ superλ₯Ό μ°Έμ‘°λ‘ μ¬μ©νλ ννλ€μ λ³ΌκΉμ?
305+
306+ - μλΈ ν΄λμ€μ νλ‘ν νμ
λ©μλ λ΄μμ ` super .λ©μλ` λ μνΌ ν΄λμ€μ νλ‘ν νμ
λ©μλλ₯Ό κ°λ¦¬ν΅λλ€.
307+ ` ` ` js
308+ // μνΌ ν΄λμ€
309+ class Base {
310+ constructor (name ) {
311+ this .name = name;
312+ }
313+
314+ sayHi () {
315+ return ` Hi! ${ this .name } ` ;
316+ }
317+ }
318+
319+ // μλΈ ν΄λμ€
320+ class Derived extends Base {
321+ sayHi () {
322+ // super.sayHiλ μνΌ ν΄λμ€μ νλ‘ν νμ
λ©μλλ₯Ό κ°λ¦¬ν΅λλ€.
323+ return ` ${ super .sayHi ()} . how are you doing?` ;
324+ }
325+ }
326+
327+ const derived = new Derived (' Lee' );
328+ console .log (derived .sayHi ()); // Hi! Lee. how are you doing?
329+ ` ` `
330+ - λ¨, superκ° μνΌ ν΄λμ€μ λ©μλκ° λ°μΈλ© λ κ°μ²΄μΈ μνΌ ν΄λμ€μ prototype νλ‘νΌν°μ λ°μΈλ©λ νλ‘ν νμ
μ μ°Έμ‘°ν μ μμ΄μΌ ν©λλ€. μλ μ²λΌμ.
331+ ` ` ` js
332+ // μνΌ ν΄λμ€
333+ class Base {
334+ constructor (name ) {
335+ this .name = name;
336+ }
337+
338+ sayHi () {
339+ return ` Hi! ${ this .name } ` ;
340+ }
341+ }
342+
343+ class Derived extends Base {
344+ sayHi () {
345+ // __superλ Base.prototypeμ κ°λ¦¬ν΅λλ€.
346+ const __super = Object .getPrototypeOf (Derived .prototype );
347+ return ` ${ __super .sayHi .call (this )} how are you doing?` ;
348+ }
349+ }
350+ ` ` `
351+ - μ΄λ κ² λμνκΈ° μν΄ λ©μλλ λ΄λΆ μ¬λ‘― ` [[HomeObject]]` λ₯Ό κ°μ§λ©° μμ μ λ°μΈλ©νκ³ μλ κ°μ²΄λ₯Ό κ°λ¦¬ν΅λλ€.
352+ - λ¨, ES6μ λ©μλ μΆμ½ ννμΌλ‘ μ μλ ν¨μλ§ ` [[HomeObject]]` λ₯Ό κ°μ΅λλ€.
353+ ` ` ` js
354+ const obj = {
355+ // [[HomeObject]]λ₯Ό κ°μ΅λλ€.
356+ foo () {},
357+ // [[HomeObject]]λ₯Ό κ°μ§ μμ΅λλ€.
358+ bar : function () {}
359+ };
360+ ` ` `
361+
362+ <br>
363+
364+ > κ²°κ΅ super μ°Έμ‘°λ₯Ό μμ¬ μ½λλ‘ νννλ©΄ μλμ κ°μ΅λλ€.
365+ ` ` ` js
366+ super = Object .getPrototypeOf ([[HomeObject]])
367+ ` ` `
368+ 1. ` [[HomeObject]]` λ λ©μλ μμ μ λ°μΈλ©νκ³ μλ κ°μ²΄λ₯Ό κ°λ¦¬ν΅λλ€.
369+ 2. ` [[HomeObject]]` λ₯Ό ν΅ν΄ λ©μλ μμ μ λ°μΈλ©νκ³ μλ κ°μ²΄μ νλ‘ν νμ
μ μ°Ύμ μ μμ΅λλ€.
370+ 3. μλ‘ λ€μλ©΄, Derived ν΄λμ€μ sayHi λ©μλλ Derived.prototypeμ λ°μΈλ©λμ΄ μμ΅λλ€.
371+ - λ°λΌμ Derived ν΄λμ€μ sayHi λ©μλμ ` [[HomeObject]]` λ Derived.prototypeμ΄κ³ , μ΄λ₯Ό ν΅ν΄ Derived ν΄λμ€μ sayHi λ©μλ λ΄λΆμ super μ°Έμ‘°κ° Base.prototypeμΌλ‘ κ²°μ λ©λλ€.
372+ - μ΅μ’
μ μΌλ‘ super.sayHiλ Base.prototype.sayHiλ₯Ό κ°λ¦¬ν€κ² λΌμ£ .
373+
374+ <br>
375+
376+ - μλΈ ν΄λμ μ μ λ©μλ λ΄μμ ` super .λ©μλ` λ μνΌ ν΄λμ€μ μ μ λ©μλλ₯Ό κ°λ¦¬ν΅λλ€.
377+ ` ` ` js
378+ // μνΌ ν΄λμ€
379+ class Base {
380+ static sayHi () {
381+ return ' Hi!' ;
382+ }
383+ }
384+
385+ // μλΈ ν΄λμ€
386+ class Derived extends Base {
387+ static sayHi () {
388+ // super.sayHiλ μνΌ ν΄λμ€μ μ μ λ©μλλ₯Ό κ°λ¦¬ν΅λλ€.
389+ return ` ${ super .sayHi ()} how are you doing?` ;
390+ }
391+ }
392+
393+ console .log (Derived .sayHi ()); // Hi! how are you doing?
394+ ` ` `
395+
396+ <br>
397+
398+ ### μμ ν΄λμ€μ μΈμ€ν΄μ€ μμ± κ³Όμ
399+ > ν΄λμ€κ° λ¨λ
μΌλ‘ μΈμ€ν΄μ€λ₯Ό μμ±νλ κ³Όμ λ³΄λ€ μμμ ν΅ν΄ μΈμ€ν΄μ€λ₯Ό μμ±νλ κ³Όμ μ΄ λ 볡μ‘ν©λλ€.
400+
401+ μλΈ ν΄λμ€κ° new μ°μ°μμ ν¨κ» νΈμΆλλ©΄ μλμ κ³Όμ μ ν΅ν΄ μΈμ€ν΄μ€λ₯Ό μμ±ν©λλ€.
402+
403+ - **μλΈ ν΄λμ€μ super νΈμΆ**
404+ - μλ°μ€ν¬λ¦½νΈ μμ§μ ν΄λμ€ νκ° μ μνΌ ν΄λμ€μ μλΈ ν΄λμ€λ₯Ό ꡬλΆνκΈ° μν΄ ` base` λλ ` derived` λ₯Ό κ°μΌλ‘ κ°λ λ΄λΆ μ¬λ‘― ` [[ConstructorKind]]` λ₯Ό κ°μ΅λλ€.
405+ - λ€λ₯Έ ν΄λμ€λ₯Ό μμλ°μ§ μλ ν΄λμ€λ λ΄λΆ μ¬λ‘― ` [[ConstructorKind]]` μ κ°μ΄ ` base` μΈ λ°λ©΄, λ€λ₯Έ ν΄λμ€λ₯Ό μμλ°λ ν΄λμ€λ ` derived` λ‘ μ€μ λλ©° μ΄λ₯Ό ν΅ν΄ λμμ΄ κ΅¬λΆλ©λλ€.
406+ - μμλ°λ ν΄λμ€κ° new μ°μ°μμ ν¨κ» νΈμΆλλ©΄ μμ μ΄ μ§μ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μκ³ μνΌ ν΄λμ€μ μΈμ€ν΄μ€ μμ±μ μμν©λλ€. μ΄κ² λ°λ‘ μλΈ ν΄λμ€μ constructorμμ λ°λμ superλ₯Ό νΈμΆν΄μΌ νλ μ΄μ μ£ .
407+ - superκ° νΈμΆλλ©΄ μνΌ ν΄λμ€μ constructorκ° νΈμΆλ©λλ€. μλΈ ν΄λμ€μ constructor λ΄λΆμ super νΈμΆμ΄ μλ€λ©΄ μλ¬κ° λ°μνλ μ΄μ λ μ€μ μΈμ€ν΄μ€λ₯Ό μμ±νλ 주체λ μνΌ ν΄λμ€μ΄λ―λ‘, μνΌ ν΄λμ€μ constructorκ° νΈμΆλμ§ μμΌλ©΄ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μκΈ° λλ¬Έμ΄μ£ .
408+
409+ <br>
410+
411+ - **μνΌ ν΄λμ€μ μΈμ€ν΄μ€ μμ±κ³Ό this λ°μΈλ©**
412+ - μνΌ ν΄λμ€μ constructor λ΄λΆμ μ½λκ° μ€νλκΈ° μ΄μ μ μ묡μ μΌλ‘ λΉ κ°μ²΄λ₯Ό μμ±νλλ°, μ΄ λΉ κ°μ²΄κ° ν΄λμ€μ μΈμ€ν΄μ€μ
λλ€. κ·Έλ¦¬κ³ μ묡μ μΌλ‘ μμ±λ λΉ κ°μ²΄λ thisμ λ°μΈλ© λμ£ . κ²°κ΅ μνΌ ν΄λμ€μ constructor λ΄λΆμ thisλ μμ±λ thisλ₯Ό κ°λ¦¬ν€κ² λ©λλ€.
413+ - μ΄ λ μΈμ€ν΄μ€λ μνΌ ν΄λμ€κ° μμ±ν κ²μ΄μ§λ§, new μ°μ°μμ ν¨κ² νΈμΆλ ν΄λμ€λ μλΈ ν΄λμ€μ
λλ€. μ¦, new μ°μ°μμ ν¨κ» νΈμΆλ ν¨μλ₯Ό κ°λ¦¬ν€λ ` new .target ` μ μλΈ ν΄λμ€λ₯Ό κ°λ¦¬ν€λ©°, μΈμ€ν΄μ€λ ` new .target ` μ΄ κ°λ¦¬ν€λ μλΈ ν΄λμ€κ° μμ±ν κ²μΌλ‘ μ²λ¦¬λ©λλ€.
414+ - κ²°κ΅ μμ±λ μΈμ€ν΄μ€μ νλ‘ν νμ
μ μνΌ ν΄λμ€μ prototype νλ‘νΌν°κ° κ°λ¦¬ν€λ κ°μ²΄κ° μλλΌ ` new .target ` μ΄ κ°λ¦¬ν€λ μλΈ ν΄λμ€μ prototype νλ‘νΌν°μ κ°μ²΄κ° λλ κ²μ΄μ£ .
415+
416+ <br>
417+
418+ - **μνΌ ν΄λμ€μ μΈμ€ν΄μ€ μ΄κΈ°ν**
419+ - μνΌ ν΄λμ€μ constructorκ° μ€νλκ³ thisμ λ°μΈλ©λ μΈμ€ν΄μ€λ₯Ό μ΄κΈ°νν©λλ€.
420+
421+ <br>
422+
423+ - **μλΈ ν΄λμ€ constructorλ‘μ 볡κ·μ this λ°μΈλ©**
424+ - super νΈμΆμ΄ μ’
λ£λκ³ μ μ΄ νλ¦μ΄ μλΈ ν΄λμ€λ‘ λμμ€λ©΄ superκ° λ°νν μΈμ€ν΄μ€κ° thisμ λ°μΈλ©λ©λλ€.
425+ - μλΈ ν΄λμ€λ λ³λμ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μκ³ superκ° λ°νν μΈμ€ν΄μ€λ₯Ό thisμ λ°μΈλ©νμ¬ κ·Έλλ‘ μ¬μ©ν©λλ€.
426+ - μ΄μ²λΌ superκ° νΈμΆλμ§ μμΌλ©΄ μΈμ€ν΄μ€κ° μμ±λκΈ°λ 컀λ
this λ°μΈλ©λ μ΄λ£¨μ΄μ§μ§ μμ΅λλ€. μλΈ ν΄λμ€μ constructorμμ superλ₯Ό νΈμΆνκΈ° μ μλ thisλ₯Ό μ°Έμ‘°ν μ μλ μ΄μ μ£ .
427+
428+ <br>
429+
430+ - **μλΈν΄λμ€μ μΈμ€ν΄μ€ μ΄κΈ°ν**
431+ - μλΈ ν΄λμ€μ constructorκ° μ€νλκ³ thisμ λ°μΈλ©λ μΈμ€ν΄μ€μ νλ‘νΌν°λ₯Ό μΆκ°ν©λλ€.
432+
433+ <br>
434+
435+ - **μΈμ€ν΄μ€ λ°ν**
436+ - ν΄λμ€μ λͺ¨λ μ²λ¦¬κ° λλλ©΄ μμ±λ μΈμ€ν΄μ€κ° λ°μΈλ©λ thisκ° μ묡μ μΌλ‘ λ°νλ©λλ€.
437+
196438<hr>
197439<br>
0 commit comments