์๋ ํ์ธ์ Foma ๐ป ์ ๋๋ค.
์ค๋๋ ์ญ์ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ๋ฐฐ์ด ํ๋กํ ํ์ ์ ๋ณต์ตํ๋ ์ฐจ์์์ ๋ค์ ํ๋ฒ ์ ๋ฆฌํ๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ฐ๋ก ์์ํ ๊ฒ์~
Prototype์ด๋?
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ๊ฐ์ฒด๋ ์จ๊น ํ๋กํผํฐ๋ก Prototype์ ๊ฐ์ง๊ณ ์๋ค.
์ด๊ฒ์ null์ด๊ฑฐ๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ์ ์๋๋ฐ ์ด๊ฒ์ ํตํด์ ํด๋น ๊ฐ์ฒด์ ๊ธฐ๋ฅ(๋ฉ์๋)์ ๋ณต์ฌํ๊ฑฐ๋ ์ถ๊ฐํ ์ ์๋ค.
์ด๋ ๊ฒ ์ฐธ์กฐํ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํ์ฌ ๊ฐ์ฒด์ 'ํ๋กํ ํ์ '์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
Prototype ์ค์ ํ๊ธฐ
1. __proto__
์ด๋์ ์๋ฅผ ์ง์นญํ๋ 'player'๋ผ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ
let player = {
firstName:"Young",
lastName:"An",
get fullName() {
return this.firstName + " " + this.lastName
},
set fullName(value) {
[this.firstName,this.lastName] = value.split(" ")
},
jump: function() {
print("jump")
},
run:function() {
print("run")
}
}
๋๊ตฌ์ ์ 'basketBallPlayer' ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด 'player'๋ฅผ ํ๋กํ ํ์ ์ผ๋ก ์ฐธ์กฐํ๋ค.
์ด๋ ๊ฒ ํ๋ฉด 'player'์ ์๋ jump() ๋ฉ์๋๋ฅผ basketBallPlayer๋ ์ฌ์ฉํ ์ ์๋ค.
let basketBallPlayer ={
shoot:function() {
print("shoot")
},
//ํ๋กํ ํ์
์์์ __proto__ ๋ผ๊ณ ํ๋กํผํฐ๋ช
์ ํด์ค์ผ ํจ.
__proto__:player
}
//ํ๋กํ ํ์
์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
basketballPlayer.jump() //jump
2. Object.create(obj)
__proto__๋ฅผ ์ง์ ์ค์ ํ๋ ๊ฒ๋ณด๋ค๋ ๋ ๋ชจ๋ํ ๋ฐฉ์์ผ๋ก ํ๋กํ ํ์ ์ ์ค์ ํ ์ ์๋ค.
์๋์ ๊ฐ์ด ์ค์ ํด๋ __proto__์์ ์ค์ ํ ๊ฒ๊ณผ ๊ฐ์ด ์ฑํํ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
let baseBallPlayer = Object.create(player)
๋ด์ฅ ๊ฐ์ฒด ํ๋กํ ํ์ ์์
๋ฌผ๋ก ๋ด์ฅ ๊ฐ์ฒด ํ๋กํ ํ์ ์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ ์๋ ์๋ค.
์๋์ ๊ฐ์ด String์ ํ๋กํ ํ์ ์ sayHi() ๋ฉ์๋๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
String.prototype.sayHi = function() {
print("hi")
}
ํ์ง๋ง ์ด์ ๊ฐ์ด ๋ด์ฅ ๊ฐ์ฒด์ ํ๋กํ ํ์ ์ ์์ ํ๋ ๊ฒ์ ๋ชจ๋ ๋ฉ์๋๋ฅผ ๋ฎ์ด์ธ ์ํ์ด ์์ผ๋ฏ๋ก ์ฐ์ง ์๋ ๊ฒ์ด ์ข๋ค.
๋จ, ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ช ์ธ์์ ์๋ ๋ฉ์๋์ ๋์ผํ ๊ธฐ๋ฅ์ ํ๋ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ(ํ๋ฆฌํ)์ ํ์ฉ๋๋ค.
๋ํ ์๋์ ๊ฐ์ด ๋ด์ฅ ๊ฐ์ฒด๋ฅผ ํ๋กํ ํ์ ์ผ๋ก ์ฑํํ ์๋ ์๋ค.
์์๋ฐ์ ๋ฉ์๋์ธ์ง ํ์ธํ๊ธฐ
hasOwnProperty(ํ๋กํผํฐ๋ช ) ์ผ๋ก ๋ฉ์๋๊ฐ ์์๋ฐ์๋์ง ์๋์ง ํ์ธํ ์ ์๋ค.
for (let key in basketballPlayer) {
//์์๋ฐ์ ๋ฉ์๋์ธ์ง ์๋ ๋ฒ
if (basketballPlayer.hasOwnProperty(key)) {
print("๋ด ํ๋กํผํฐ")
}else {
print("์์๋ฐ์ ํ๋กํผํฐ")
}
print(key)
}
/*
๋ด ํ๋กํผํฐ
shoot
์์๋ฐ์ ํ๋กํผํฐ
jump
์์๋ฐ์ ํ๋กํผํฐ
firstName
์์๋ฐ์ ํ๋กํผํฐ
lastName
์์๋ฐ์ ํ๋กํผํฐ
fullName
์์๋ฐ์ ํ๋กํผํฐ
run
*/
Reference
'๐ Language > Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] Static,Protected,Private์ ๋ํด ์์๋ณด๊ธฐ (0) | 2022.02.15 |
---|---|
[JS] ํด๋์ค(Class) ๊ธฐ๋ณธ ๋ฌธ๋ฒ๊ณผ ์์ (0) | 2022.02.12 |
[JS] ํ๋กํผํฐ ์ต์ (ํ๋๊ทธ) ๋ค๋ฃจ๊ธฐ(Property Flag) (0) | 2022.02.12 |
[JS] JSON๊ณผ ๊ฐ์ฒด ๋ค๋ฃจ๊ธฐ (0) | 2022.02.05 |
[JS] ๊ตฌ์กฐ๋ถํด(Destructuring) (feat. ์ฝ๊ฒ ๋ณ์ ๋ง๋ค๊ธฐ) (0) | 2022.02.05 |
๋๊ธ