๐Ÿ“ ์˜ค๋Š˜ ํ•œ ๊ฒƒ

  1. ํ”„๋กœํ† ํƒ€์ž… / ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ / ํ‘œ์ค€ ๋‚ด์žฅ ๊ฐ์ฒด์˜ ํ™•์žฅ

๐Ÿ“š ๋ฐฐ์šด ๊ฒƒ

1. ํ”„๋กœํ† ํƒ€์ž…

1) ํ”„๋กœํ† ํƒ€์ž…(prototype)์ด๋ž€?

์ด๊ฑฐ๋ณด๊ณ  prototype ์ดํ•ด ๋ชปํ•˜๋ฉด ๊ฐ•์˜์ ‘์Œ ์ฐธ๊ณ 

  • '์œ ์ „์ž'๋ผ๊ณ  ์ดํ•ดํ•  ๊ฒƒ

  • ๋ถ€๋ชจ Me๋Š” name = 'syong'์„ ๊ฐ€์ง. ๋ถ€๋ชจ Me์— ์˜ํ•ด ํƒœ์–ด๋‚œ ์ž์‹ I๋„ name = 'syong'์ž„.

// ํ”„๋กœํ† ํƒ€์ž…
function Me () {
  this.a = 'a';
  this.b = 'b';
}

Me.prototype.name = 'syong';

const I = new Me();

console.log(I); // {a = 'a', b = 'b'}
console.log(I.name); // syong

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

์ƒํ™œ์ฝ”๋”ฉ 2014 prototype ๊ฐ•์˜ ์ฐธ๊ณ 

prototype์— ์ €์žฅ๋œ ์†์„ฑ๋“ค์€
์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด์„œ ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ๋•Œ
๊ทธ ๊ฐ์ฒด์— ์—ฐ๊ฒฐ๋œ๋‹ค.

[ ์˜ˆ์ œ 1 ]

function Ultra () {}
Ultra.prototype.ultraProp = true;

function Super () {}
Super.prototype = new Ultra();

function Sub () {}
Sub.prototype = new Super();
Sub.prototype.ultraProp = 2;

var o = new Sub();
console.log(o.ultraProp); // 2
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” o.ultraProp์˜ ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๋จผ์ € ๊ฐ์ฒด o๋ฅผ ๋’ค์ง„๋‹ค. ๋ชป ์ฐพ์œผ๋ฉด ๊ฐ์ฒด o๋ฅผ ๋งŒ๋“  ์ƒ์„ฑ์ž Sub์˜ prototype ๊ฐ์ฒด๋ฅผ ๋’ค์ง„๋‹ค. ์ƒ์„ฑ์ž Sub์˜ prototype ๊ฐ์ฒด์—์„œ ultraProp ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ๊ทธ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

[ ์˜ˆ์ œ2 ]

function Ultra () {}
Ultra.prototype.ultraProp = true;

function Super () {}
Super.prototype = new Ultra();

function Sub () {}
var s = new Super();
s.ultraProp = 3;
Sub.prototype = s;

var o = new Sub();
console.log(o.ultraProp); // 3
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” o.ultraProp์˜ ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๋จผ์ € ๊ฐ์ฒด o๋ฅผ ๋’ค์ง„๋‹ค. ๋ชป ์ฐพ์œผ๋ฉด ๊ฐ์ฒด o๋ฅผ ๋งŒ๋“  ์ƒ์„ฑ์ž Sub์˜ prototype ๊ฐ์ฒด๋ฅผ ๋’ค์ง„๋‹ค. ์ƒ์„ฑ์ž Sub์˜ prototype ๊ฐ์ฒด์— ๋ณ€์ˆ˜ s๊ฐ€ ํ• ๋‹น๋˜์–ด ์žˆ๋‹ค. ๋ณ€์ˆ˜ s์—๋Š” ์ƒ์„ฑ์ž Super๊ฐ€ ๋งŒ๋“  ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น๋˜์–ด ์žˆ๋‹ค. ๊ทธ ๊ฐ์ฒด์˜ prototype ํ”„๋กœํผํ‹ฐ๊ฐ€ 3์ด๋ฏ€๋กœ ์ด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

[ ์˜ˆ์ œ3 ]

function Ultra () {}
Ultra.prototype.ultraProp = true;

function Super () {}
var t = new Ultra();
t.ultraProp = 4;
Super.prototype = t;

function Sub () {}
var s = new Super();
Sub.prototype = s;

var o = new Sub();
console.log(o.ultraProp); // 4
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” o.ultraProp์˜ ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๋จผ์ € ๊ฐ์ฒด o๋ฅผ ๋’ค์ง„๋‹ค. ๋ชป ์ฐพ์œผ๋ฉด ๊ฐ์ฒด o๋ฅผ ๋งŒ๋“  ์ƒ์„ฑ์ž Sub์˜ prototype ๊ฐ์ฒด๋ฅผ ๋’ค์ง„๋‹ค. ์—ฌ๊ธฐ์„œ๋„ ๋ชป ์ฐพ์œผ๋ฉด ์ƒ์„ฑ์ž Super์˜ prototype ๊ฐ์ฒด๋ฅผ ๋’ค์ง„๋‹ค. ์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์ณ 4๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ’ก ์ฃผ์˜ !

Sub.prototype = new Super(); // (o)
Sub.prototype = Super.prototype; // (x)

๋‘ ๋ฒˆ์งธ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜๋ฉด, Sub์˜ prototype ๊ฐ์ฒด์— ์–ด๋–ค ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ Super์˜ prototype ๊ฐ์ฒด๋„ ์˜ํ–ฅ์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ์ž์‹ ๊ฐ์ฒด์— ์–ด๋– ํ•œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ถ€๋ชจ ๊ฐ์ฒด์—๋„ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์–ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.


2. ํ‘œ์ค€ ๋‚ด์žฅ ๊ฐ์ฒด์˜ ํ™•์žฅ

1) ํ‘œ์ค€ ๋‚ด์žฅ ๊ฐ์ฒด(standard built-in object)๋ž€?

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋‚˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋™์ž‘ํ•˜๋Š” ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ์ด, ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š”, ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ๊ฐ์ฒด

  • Object, Function, Array, String, Boolean, Number, Math, Date, RegExp(์ •๊ทœํ‘œํ˜„์‹)

2) ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ์ฒด

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ํ•„์š”ํ•œ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด

3) ํ‘œ์ค€ ๋‚ด์žฅ ๊ฐ์ฒด๋ฅผ ํ™•์žฅํ•˜๋Š” ๋ฒ•

// ์˜ˆ์ œ1 - ๋ฐฐ์—ด ์š”์†Œ ๋žœ๋คํ•˜๊ฒŒ ๊ฐ€์ ธ์˜ค๊ธฐ
{
const arr = new Array('I', 'my', 'me', 'mine');

function getRandomValueFromArray () {
  const index = Math.floor(arr.length * Math.random());
  return arr[index];
}

console.log(getRandomValueFromArray());
}

// ์˜ˆ์ œ1 - ํ‘œ์ค€ ๋‚ด์žฅ ๊ฐ์ฒด์˜ ํ™•์žฅ
Array.prototype.random = function () {
  const index = Math.floor(this.length * Math.random());
  return this[index];
}

const arr = new Array('I', 'my', 'me', 'mine');
console.log(arr.random());
  • prototype์„ ์ด์šฉํ•ด ๋ชจ๋“  ๋ฐฐ์—ด์— ๊ณตํ†ต์ ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” API๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Array ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ๋งŒ๋“  ๋ชจ๋“  ๋ฐฐ์—ด ๊ฐ์ฒด์— random() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก, ํ•จ์ˆ˜์—์„œ๋Š” arr ๋Œ€์‹  this๋ผ๊ณ  ์จ์ค˜์•ผ ํ•œ๋‹ค.


โœจ ๋‚ด์ผ ํ•  ๊ฒƒ

  1. Object, ๋ชจ๋“ˆ
profile
dev log

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

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด

Powered by GraphCDN, the GraphQL CDN