๐Ÿฏ ํ”„๋กœํ† ํƒ€์ž…(Prototype)

Aprilยท2021๋…„ 8์›” 21์ผ
0

โœจJavascript

๋ชฉ๋ก ๋ณด๊ธฐ
17/45
post-thumbnail

๊ฐœ์ธ ๊ณต๋ถ€๋ฅผ ์œ„ํ•ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์–ธ์–ด์ด๋‹ค.

  • ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์–ธ์–ด์—์„œ๋Š” ์ƒ์†์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ
  • ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์–ธ์–ด์—์„œ๋Š” ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์›ํ˜•(prototype)์œผ๋กœ ์‚ผ๊ณ  ์ด๋ฅผ ๋ณต์ œ(์ฐธ์กฐ)ํ•จ์œผ๋กœ์จ ์ƒ์†๊ณผ ๋น„์Šทํ•œ ํšจ๊ณผ๋ฅผ ์–ป๋Š”๋‹ค.

์ด๋Ÿฐ ๋…ํŠนํ•œ ๊ฐœ๋…์ธ ํ”„๋กœํ† ํƒ€์ž…์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.


ํ”„๋กœํ† ํƒ€์ž…์˜ ๊ฐœ๋… ์ดํ•ด

Constructor, prototype, instance

์ด ๊ทธ๋ฆผ์„ ์ข€ ๋” ๊ตฌ์ฒด์ ์ธ ํ˜•ํƒœ๋กœ ๋ฐ”๊พธ๋ฉด,

์ด๋Ÿฐ ๊ทธ๋ฆผ์ด ๋œ๋‹ค. ์œ„์™€ ์•„๋ž˜์˜ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด์„œ ํ๋ฆ„์„ ๋”ฐ๋ผ๊ฐ€ ๋ณด์ž.

  • ์–ด๋–ค ์ƒ์„ฑ์ž ํ•จ์ˆ˜Constructor๋ฅผ new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํ˜ธ์ถœํ•˜๋ฉด
  • Constructor์—์„œ ์ •์˜๋œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šคinstance๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค
  • ์ด๋•Œ instance์—๋Š” __proto__๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ž๋™์œผ๋กœ ๋ถ€์—ฌ๋˜๋Š”๋ฐ,
  • ์ด ํ”„๋กœํผํ‹ฐ๋Š” Constructor์˜ prototype๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

๋ชจ๋“  ๊ฐ์ฒด๋“ค์ด ๋ฉ”์†Œ๋“œ์™€ ์†์„ฑ๋“ค์„ ์ƒ์† ๋ฐ›๊ธฐ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ์œผ๋กœ์จ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด(prototype object)๋ฅผ ๊ฐ€์ง„๋‹ค๋Š” ์˜๋ฏธ


prototype์™€ __proto__๋ผ๋Š” ํ”„๋กœํผํ‹ฐ์˜ ๊ด€๊ณ„๊ฐ€ ํ”„๋กœํ† ํƒ€์ž…์˜ ํ•ต์‹ฌ์ด๋‹ค.

  • prototype์€ ๊ฐ์ฒด์ด๋‹ค. ์ด๋ฅผ ์ฐธ์กฐํ•˜๋Š” __proto__(dunder proto: ๋˜๋” ํ”„๋กœํ† ) ์—ญ์‹œ ๊ฐ์ฒด์ด๋‹ค.
  • prototype ๊ฐ์ฒด ๋‚ด๋ถ€์—๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ์‚ฌ์šฉํ•  ๋ฉ”์„œ๋“œ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋ฉด ์ธ์Šคํ„ด์Šค์—์„œ๋„ ์ˆจ๊ฒจ์ง„ ํ”„๋กœํผํ‹ฐ์ธ __proto__ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ด ๋ฉ”์„œ๋“œ๋“ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์ฐธ๊ณ ๋กœ,
ES5.1 ๋ช…์„ธ์—๋Š” proto๊ฐ€ ์•„๋‹ˆ๋ผ [[prototype]]์ด๋ผ๋Š” ๋ช…์นญ์œผ๋กœ ์ •์˜๋˜์–ด ์žˆ๋‹ค. ๋ช…์„ธ์—๋Š” instance.proto์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ , ์˜ค์ง Object.getPrototypeOf(instance)/Reflelect.getPrototypeOf(instance)๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •์˜ํ–ˆ๋‹ค.
์‹ค๋ฌด์—์„œ๋Š” ๊ฐ€๊ธ‰์  __proto__๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ๊ถŒ์žฅ. ๋Œ€์‹  Object.getPrototypeOf()/Object.create() ๋“ฑ์„ ์ด์šฉํ•˜๋„๋ก ํ•˜์ž.




์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์ดํ•ดํ•ด๋ณด์ž.

const Person = (name) => {
  this._name = name;
};

Person.prototype.getName = () => {
  return this._name;
};

Person์˜ ์ธ์Šคํ„ด์Šค๋Š” __proto__ ํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•ด getName์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

const april = new Person('april');

april.__proto__.getName(); // (1) undefined

instance์˜ __proto__๊ฐ€ Constructor์˜ prototype ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•˜๋ฏ€๋กœ ๊ฒฐ๊ตญ ๋‘˜์€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋ฐ”๋ผ๋ณด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

(1) ๋‹ค๋งŒ, ์—ฌ๊ธฐ์„œ undefined๊ฐ€ ๋ฐ˜ํ™˜๋œ ์ด์œ ๋Š” this์— ๋ฐ”์ธ๋”ฉ ๋œ ๋Œ€์ƒ์ด ์ž˜๋ชป๋๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ, ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ๋ฉ”์„œ๋“œ๋กœ์„œ ํ˜ธ์ถœํ•  ๋•Œ๋Š” ๋ฉ”์„œ๋“œ๋ช… ๋ฐ”๋กœ ์•ž์˜ ๊ฐ์ฒด๊ฐ€ ๊ณง this๊ฐ€ ๋œ๋‹ค. ๐Ÿฏ Javascript this

__proto__ ๊ฐ์ฒด์— name ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด?

const april = new Person('april');

april.__proto__._name = 'april__proto__';
april.__proto__.getName(); // (1) april__proto__

๊ด€๊ฑด์€ this์ธ๋ฐ, this๋ฅผ ์ธ์Šคํ„ด์Šค๋กœ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ __proto__ ์—†์ด ์ธ์Šคํ„ด์Šค์—์„œ ๊ณง๋ฐ”๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ด๋‹ค.

const april = new Person('april');

april.getName(); // (1) april

์ด ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” __proto__๊ฐ€ ์ƒ๋žต ๊ฐ€๋Šฅํ•œ ํ”„๋กœํผํ‹ฐ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ •๋ฆฌํ•˜์ž๋ฉด,
new ์—ฐ์‚ฐ์ž๋กœ Constructor๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด instance๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š”๋ฐ,
์ด instance์˜ ์ƒ๋žต ๊ฐ€๋Šฅํ•œ ํ”„๋กœํผํ‹ฐ์ธ __proto__๋Š” Constructor์˜ prototype์„ ์ฐธ์กฐํ•œ๋‹ค.


์ด๋ฒˆ์—” ์šฐ๋ฆฌ๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฐ์—ด์„ ํ†ตํ•ด ์ดํ•ดํ•ด๋ณด์ž.

๋ฐฐ์—ด์˜ ์—ฌ๋Ÿฌ ๋ฉ”์„œ๋“œ๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์ด์œ ์— ๋Œ€ํ•ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.


ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ

์–ด๋–ค ๋ฐ์ดํ„ฐ์˜ __proto__ ํ”„๋กœํผํ‹ฐ ๋‚ด๋ถ€์— ๋‹ค์‹œ __proto__ ํ”„๋กœํผํ‹ฐ๊ฐ€ ์—ฐ์‡„์ ์œผ๋กœ ์ด์–ด์ง„ ๊ฒƒ์„ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ(prototype chain)์ด๋ผ ํ•˜๊ณ ,
์ด ์ฒด์ธ์„ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์„ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ด๋‹(prototype chaining)์ด๋ผ๊ณ  ํ•œ๋‹ค.

ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ด๋‹(prototype chaining)์€
์–ด๋–ค ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€

  • ๋ฐ์ดํ„ฐ ์ž์‹ ์˜ ํ”„๋กœํผํ‹ฐ๋“ค์„ ๊ฒ€์ƒ‰ํ•ด์„œ ์›ํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ ,
  • ์—†์œผ๋ฉด __proto__๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ์žˆ์œผ๋ฉด ๊ทธ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ ,
  • ์—†์œผ๋ฉด ๋‹ค์‹œ __proto__๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ์‹คํ–‰ํ•˜๋Š” ์‹์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค.
์ฐธ๊ณ ๋กœ, ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋“œ(method overriding)์™€ ๋™์ผํ•œ ๋งฅ๋ฝ์ด๋‹ค.
๋ฉ”์„œ๋“œ ์œ„์— ๋ฉ”์„œ๋“œ๋ฅผ ์—Ž์–ด์”Œ์› ๋‹ค๋Š” ํ‘œํ˜„.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ๋Š” ๋ฐฉ์‹์€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋Œ€์ƒ์ธ ์ž์‹ ์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ , ์—†์œผ๋ฉด ๊ทธ ๋‹ค์Œ์œผ๋กœ ๊ฐ€๊นŒ์šด ๋Œ€์ƒ์ธ __proto__๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ง„ํ–‰๋œ๋‹ค. '๊ต์ฒด'ํ•˜๋Š” ํ˜•ํƒœ๋ผ๋ฉด ์›๋ณธ์—๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ํ˜•ํƒœ๊ฐ€ ๋˜๊ฒ ์ง€๋งŒ '์–น๋Š”, ๋ฎ์–ด ์”Œ์šด' ํ˜•ํƒœ๋ผ๋ฉด ์›๋ณธ์ด ์•„๋ž˜์— ์œ ์ง€๋˜๊ณ  ์žˆ๊ณ  ์›๋ณธ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.


โ˜‘๏ธ ๊ฐ์ฒด ์ „์šฉ ๋ฉ”์„œ๋“œ์˜ ์˜ˆ์™ธ์‚ฌํ•ญ

  • ์–ด๋–ค ์ƒ์„ฑ์ž ํ•จ์ˆ˜์ด๋“  prototype์€ ๋ฐ˜๋“œ์‹œ ๊ฐ์ฒด์ด๋‹ค.
  • Object.prototype์ด ์–ธ์ œ๋‚˜ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์˜ ์ตœ์ƒ๋‹จ์— ์กด์žฌํ•œ๋‹ค.
  • ๋”ฐ๋ผ์„œ, ๊ฐ์ฒด์—์„œ๋งŒ ์‚ฌ์šฉํ•  ๋ฉ”์„œ๋“œ๋Š” ๋‹ค๋ฅธ ์—ฌ๋Š ๋ฐ์ดํ„ฐ ํƒ€์ž…์ฒ˜๋Ÿผ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด ์•ˆ์— ์ •์˜ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.
  • ๋”ฐ๋ผ์„œ, Object.prototype์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋Š” ์–ด๋Š ์ž๋ฃŒํ˜•์ด๋˜ ์ธ์Šคํ„ด์Šค์—์„œ ๋ฐ”๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ, ๊ฐ์ฒด์—์„œ๋งŒ ์‚ฌ์šฉํ•  ๋ฉ”์„œ๋“œ๋Š” prototype ์•ˆ์— ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ฐ์ฒด์—์„œ๋งŒ ์‚ฌ์šฉํ•  ๋ฉ”์„œ๋“œ๋ฅผ prototype ๋‚ด๋ถ€์— ์ •์˜ํ•˜๋ฉด ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐํƒ€์ž…๋„ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์„ ํƒ€๊ณ  ์˜ฌ๋ผ์™€์„œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ์ด๋Ÿฐ ๋ฉ”์„œ๋“œ๋ฅผ Static method๋ผ ํ•œ๋‹ค.

โ˜‘๏ธ ๋‹ค์ค‘ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ

ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์„ 2๋‹จ๊ณ„ ์ด์ƒ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด,

__proto__๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋Œ€์ƒ, ์ฆ‰ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ prototype์ด
์—ฐ๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ์ƒ์œ„ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ”๋ผ๋ณด๊ฒŒ๋” ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

const Grade = () => {
  const ars = Array.prototype.slice.call(arguments);
  for( var i = 0; i < args.length; i++) {
    this[i] = args[i];
  }
  this.length = args.length;
};

const g = new Grade(100, 80);  // (1)

(1) ๋ณ€์ˆ˜ g๋Š” Grade์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ”๋ผ๋ณธ๋‹ค.
Grade์˜ ์ธ์Šคํ„ด์Šค๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›์•„ ๊ฐ๊ฐ ์ˆœ์„œ๋Œ€๋กœ ์ธ๋ฑ์‹ฑํ•ด์„œ ์ €์žฅํ•˜๊ณ  length ํ”„๋กœํผํ‹ฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ๋“ฑ์œผ๋กœ ๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋ฅผ ์ง€๋‹ˆ์ง€๋งŒ, ๋ฐฐ์—ด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์œ ์‚ฌ๋ฐฐ์—ด๊ฐ์ฒด์ด๋‹ค.
g { 0: 100, 1: 80, length: 2 }

๋”ฐ๋ผ์„œ, ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
์ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ์ธ์Šคํ„ด์Šค g์˜ __proto__, ์ฆ‰ Grade.prototype์ด ๋ฐฐ์—ด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ”๋ผ๋ณด๊ฒŒ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.




โœจ tl;dr

  • ์–ด๋–ค ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํ˜ธ์ถœํ•˜๋ฉด
    • Constructor์—์„œ ์ •์˜๋œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋Š”๋ฐ,
    • ์ด ์ธ์Šคํ„ด์Šค์—๋Š” __proto__๋ผ๋Š”, Constructor์˜ ptototype ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ž๋™์œผ๋กœ ๋ถ€์—ฌ๋œ๋‹ค.
    • __proto__๋Š” ์ƒ๋žต ๊ฐ€๋Šฅํ•œ ์†์„ฑ์ด๋ผ์„œ,
    • ์ธ์Šคํ„ด์Šค๋Š” Constructor.ptototype์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋งˆ์น˜ ์ž์‹ ์˜ ๋ฉ”์„œ๋“œ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Constructor.ptototype์—๋Š” constructor๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๋Š” ๋‹ค์‹œ ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ์ž์‹ ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
    • ์ด ํ”„๋กœํผํ‹ฐ๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ์ž์‹ ์˜ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ๋ฌด์—‡์ธ์ง€๋ฅผ ์•Œ๊ณ ์ž ํ•  ๋•Œ ํ•„์š”ํ•œ ์ˆ˜๋‹จ์ด๋‹ค.

  • ์ง๊ฐ์‚ผ๊ฐํ˜•์˜ ๋Œ€๊ฐ์„  ๋ฐฉํ–ฅ, ์ฆ‰ __proto__ ๋ฐฉํ–ฅ์„ ๊ณ„์† ์ฐพ์•„๊ฐ€๋ฉด ์ตœ์ข…์ ์œผ๋กœ๋Š” Object.ptototype์— ๋„๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค.
    • ์ด๋Ÿฐ ์‹์œผ๋กœ __proto__ ์•ˆ์—์„œ ๋‹ค์‹œ __proto__๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๊ณผ์ •์„ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ด๋‹์ด๋ผ๊ณ  ํ•˜๋ฉฐ,
    • ์ด ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ด๋‹์„ ํ†ตํ•ด ๊ฐ ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๋ฅผ ์ž์‹ ์˜ ๊ฒƒ์ฒ˜๋Ÿผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ด๋•Œ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ž์‹ ์œผ๋กœ๋ถ€ํ„ฐ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋Œ€์ƒ๋ถ€ํ„ฐ ์ ์ฐจ ๋จผ ๋Œ€์ƒ์œผ๋กœ ๋‚˜์•„๊ฐ€๋ฉฐ, ์›ํ•˜๋Š” ๊ฐ’์„ ์ฐพ์œผ๋ฉด ๊ฒ€์ƒ‰์„ ์ค‘๋‹จํ•œ๋‹ค.

  • Object.ptototype์—๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํƒ€์ž…์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์šฉ์ ์ธ ๋ฉ”์„œ๋“œ๋งŒ์ด ์กด์žฌํ•˜๋ฉฐ
    • ๊ฐ์ฒด ์ „์šฉ ๋ฉ”์„œ๋“œ๋Š” ์—ฌ๋Š ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ๋‹ฌ๋ฆฌ Object ์ƒ์„ฑ์ž ํ•จ์ˆ˜์— ์Šคํƒœํ‹ฑํ•˜๊ฒŒ ๋‹ด๊ฒจ ์žˆ๋‹ค.

  • ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์€ ๋ฐ˜๋“œ์‹œ 2๋‹จ๊ณ„๋กœ๋งŒ ์ด๋ค„์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฌดํ•œ๋Œ€๋กœ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
profile
๐Ÿš€ ๋‚ด๊ฐ€ ๋ณด๋ ค๊ณ  ์“ฐ๋Š” ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ

0๊ฐœ์˜ ๋Œ“๊ธ€