๐ŸŽ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (11) __proto__, Object.create() ์ž์œ ์ž์žฌ๋กœ ๋‹ค๋ฃจ๊ธฐ

โšก๏ธ1. __proto__ ๋ฐฉ์‹

let esanghaessi = {
  name: '์ด์ƒํ•ด์”จ',
  type: 'ํ’€',
  attack1: 45,
  attack2: 95,
  sum: function() {
    return this.attack1 + this.attack2
  },
}
let ggoboogi = { name: '๊ผฌ๋ถ€๊ธฐ', type: '๋ฌผ', attack1: 75, attack2: 25 }

๊ผฌ๋ถ€๊ธฐ๋Š” ์ด์ƒํ•ด์”จ์˜ ์ ์ˆ˜ ํ•ฉ์น˜๊ธฐ ์Šคํ‚ฌ์„ ๊ฐ€์ ธ๋‹ค ์“ฐ๊ณ  ์‹ถ๋‹ค!

ggoboogi.__proto__ = esanghaessi
console.log(ggoboogi.sum())
100

๊ผฌ๋ถ€๊ธฐ๋Š” ์ƒ๊ฐํ–ˆ๋‹ค.

๋‚œ ์ ์ˆ˜ํ•ฉ์น˜๊ธฐ๋„ ํ•  ์ˆ˜ ์žˆ๊ณ  ์ ์ˆ˜ํ‰๊ท ๋„ ํ•  ์ˆ˜ ์žˆ์–ด!

์ด๊ฑด ๋‚˜๋งŒ ํ•  ์ˆ˜ ์žˆ์–ด ์ด์ƒํ•ด์”จ๋Š” ๋ชปํ•˜๋Š” ๊ธฐ์ˆ ์ด์•ผ~ ์ด์ƒํ•ด์”จ ๋ฐ”๋ณด~(?)

๋ผ์ด์ธ„์˜ ์‹ ๊ธฐ์ˆ ์„ ์“ฐ๊ณ  ์‹ถ์ง€๋งŒ ์ฐธ๊ธฐ๋กœ ํ•˜๊ณ  ๊ผฌ๋ถ€๊ธฐ์—๊ฒŒ ์ ์ˆ˜ ํ‰๊ท  ์Šคํ‚ฌ์„ ๋ถ€์—ฌํ•ด ์ฃผ์ž.

let ggoboogi = {
  name: '๊ผฌ๋ถ€๊ธฐ',
  type: '๋ฌผ',
  attack1: 75,
  attack2: 25,
  avg: function() {
    return (this.attack1 + this.attack2) / 2
  },
}
ggoboogi.__proto__ = esanghaessi // ๋‹ค์‹œ ์—ฐ๊ฒฐํ•ด ์ฃผ๊ณ 

console.log("๊ผฌ๋ถ€๊ธฐ์˜ ๊ณต๊ฒฉ ์ ์ˆ˜ ํ•ฉ๊ณ„ :" + ggoboogi.sum())
๊ผฌ๋ถ€๊ธฐ์˜ ๊ณต๊ฒฉ ์ ์ˆ˜ ํ•ฉ๊ณ„ :100
ggoboogi.avg()
console.log("๊ผฌ๋ถ€๊ธฐ์˜ ๊ณต๊ฒฉ ์ ์ˆ˜ ํ‰๊ท  :" + ggoboogi.avg())
๊ผฌ๋ถ€๊ธฐ์˜ ๊ณต๊ฒฉ ์ ์ˆ˜ ํ‰๊ท  :50

๊ผฌ๋ถ€๊ธฐ๋Š” ์ด์ƒํ•ด์”จ์˜ ๊ธฐ์ˆ ์„ ๋ชจ๋‘ ๋ฐ›๊ณ  ๋‹ค๋ฅธ ๊ณ ์œ  ์Šคํ‚ฌ๋„ ๋ถ€๋ฆด ์ค„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

์ด๋ฒˆ์—” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๋ณผ๊นŒ?

๐Ÿ’ฆ2. Object.create()

์„œ๋ธŒ ๊ฐ์ฒด๋กœ ์ง€์šฐ๋ ˆ๊ธฐ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

let esanghaessi = { name : '์ด์ƒํ•ด์”จ',
                    type : 'ํ’€',
                    attack1 : 45,
                    attack2 : 95,
                    sum : function () {
                      return this.attack1 + this.attack2
                      }
                    }

let jiwooleegi = Object.create(esanghaessi);

console.log(jiwooleegi)
{}__proto__:
attack1: 45
attack2: 95
name: "์ด์ƒํ•ด์”จ"
sum: ฦ’ ()
type: "ํ’€"
__proto__: Object

// ์ง€์šฐ๋ ˆ๊ธฐ์˜ ์†์„ฑ์„ ๋„ฃ์–ด์ค€๋‹ค.
jiwooleegi.name = "์ง€์šฐ๋ ˆ๊ธฐ"
jiwooleegi.type = "๊ผฌ์žฅ์˜๊ฒฐ์ •์ฒด"
// ์ง€์šฐ๋ ˆ๊ธฐ๋งŒ ์“ธ ์ˆ˜ ์žˆ๋Š” avg ๋ฉ”์„œ๋“œ
jiwooleegi.avg = function () {return (this.attack1 + this.attack2) / 2}
console.log(jiwooleegi)
name: "์ง€์šฐ๋ ˆ๊ธฐ", type: "๊ผฌ์žฅ์˜๊ฒฐ์ •์ฒด", avg: ฦ’
console.log(`${jiwooleegi.name}์˜ ๊ณต๊ฒฉ ์ ์ˆ˜ ํ•ฉ๊ณ„ : ${jiwooleegi.sum()}, ๊ณต๊ฒฉ ์ ์ˆ˜ ํ‰๊ท  : ${jiwooleegi.avg()}`)
์ง€์šฐ๋ ˆ๊ธฐ์˜ ๊ณต๊ฒฉ ์ ์ˆ˜ ํ•ฉ๊ณ„ : 140, ๊ณต๊ฒฉ ์ ์ˆ˜ ํ‰๊ท  : 70

์ง€์šฐ๋ ˆ๊ธฐ๋Š” ๋ฏธ์›Œ์„œ ๋”ฑํžˆ ์„ค๋ช…์„ ๋‹ฌ์ง€ ์•Š์•˜๋‹ค.

ํ•˜์ง€๋งŒ ์ง€์šฐ๋ ˆ๊ธฐ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ–ˆ๋˜ Object.create() ๋Š” ์ง€์šฐ๋ ˆ๊ธฐ๊ฐ€ ์ด์ƒํ•ด์”จ ๊ณต์žฅ ์ถœ์‹ ์ด๋ผ๋Š”(?) ๊ฒƒ์„ ์•Œ๊ฒŒ ํ•ด์ค€๋‹ค.


Written by@[DotoriMook]
ํ”„๋ก ํŠธ์—”๋“œ ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž ๋„ํ† ๋ฆฌ๋ฌต์˜ ๊ธฐ์ˆ ๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ ์ž…๋‹ˆ๋‹ค.

GitHubMediumTwitterFacebook