๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฐฉ์์ ์ฌ์ฉํด ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค.
let user = {
name: 'Mike',
age: 30,
}
๊ทธ๋ฐ๋ฐ ๋ง์ฝ ๋น์ทํ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ค์ด์ผ ํ๋ ์ํฉ์ด ์จ๋ค๋ฉด ์์ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ํ๋์ฝ๋ฉํด์ผ ํ๋ ๊ฑธ๊น?
๋คํํ๋, ๊ทธ๋ฐ ๊ฒฝ์ฐ์ ์์ฑ์ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
// ์ฒซ๊ธ์๋ ๋๋ฌธ์๋ก!
function User(name,age){
this.name = name;
this.age = age;
}
let user1 = new User('Mike',30)
let user2 = new User('Kitty',20)
let user3 = new User('John',40)
// new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ํธ์ถํ๋ฉด ๋๋ค.
์์ฑ์ ํจ์๋ ์ฝ๊ฒ ์๊ฐํด ๋ถ์ด๋นต ํ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ํ๋ ์ฌ๋ฃ(name,age)๋ฅผ ๋ฃ๊ณ ๋น์ทํ ๋ชจ์์ ๊ฐ์ฒด(User)๋ฅผ ์์ฑํ ์ ์๋ค.
์ ์์ ์์ new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ, ์๋์ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ ํ๋ฆ์ผ๋ก ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
function User(name,age){
// this = {} <-๋น ๊ฐ์ฒด ์์ฑ
this.name = name;
this.age = age;
// ์ํ๋ ์ฌ๋ฃ ๋ฃ์ด์ง๊ณ
// return this; <-๋ถ์ด๋นต ๋๋ ค๋ฐ์
}
๋ง์ฝ์ new ๋ฅผ ๋ถ์ฌ์ฃผ์ง ์๊ณ let user2= User('Kitty',20)
๋ผ๊ณ ๋ง ์คํํ๋ค๋ฉด
์ ์์ฑ์ ํจ์ ์คํ์์ ๋ฐ๋ก returnํ๋ ๊ฐ์ ์์ผ๋ undefined
๊ฐ ์ถ๋ ฅ๋ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ์์์ ์ฌ์ฉํด๋ณธ ์์ฑ์ ํจ์๋ ์๋์ ๊ฐ๋ค.
function User(name,age){
this.name = name;
this.age = age;
this.showName = function(){
console.log(this.name)
}
}
const mike = new User('mike',30)
์ด์ ์๋กญ๊ฒ ๋ฑ์ฅํ ํด๋์ค ํจ์๋ฅผ ์ดํด๋ณด์.
class User2{
constructor(name,age){
this.name = name;
this.age = age;
}
showName(){
console.log(this.name);
}
}
const tom = new User2('tom',23)
์์์ ๋ณด๋ค์ํผ class
๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋ด๋ถ์๋ constructor
๋ผ๋ ๋ฉ์๋๊ฐ ์ฌ์ฉ๋๋ค.
constructor๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ฃผ๋ ์์ฑ์ method ์ด๋ค. ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ๊ธฐ ์ํ ๊ฐ์ constructor ๋ด๋ถ์ ์ฌ์ฉํ๊ณ , ์์ฑ์ ํจ์๋์ ๋ง์ฐฌ๊ฐ์ง๋ก new
์ฐ์ฐ์๋ฅผ ํตํด ํธ์ถํ๋ฉด ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ผ๋ฐ ์์ฑ์ ํจ์์ class ์ ์ฐจ์ด๋ ๋ฌด์์ผ๊น?
๊ทธ ์ฐจ์ด๋ฅผ ์๊ธฐ ์ํด ์ด ๋๋ก ๋ง๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๊ฐ ํธ์ถํด๋ณด์.
tom
์ prototype ๋ด๋ถ์ showName์ด ๋ค์ด๊ฐ๊ณ , mike
๋ ๊ฐ์ฒด ๋ด๋ถ์ showName์ด ์กด์ฌํ๋ค.
๋ํ tom์ class ์ด๋ฏ๋ก new ํค์๋ ์์ด ํธ์ถํ๋ฉด ์๋ฌ๊ฐ ๋๋ค.(mike๋ ์๋ฌ๋ ์๋จ)
for in ๋ฌธ์ ์ฌ์ฉํด๋ณด๋ฉด prototype์ ํฌํจ๋ property๋ฅผ ๋ค ๋ณด์ฌ์ฃผ๊ณ , ๊ฐ์ฒด๋ง ๊ฐ์ง property๋ฅผ ํ๋ณํ๊ธฐ ์ํด์ hasOwnProperty ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. class์ ๋ฉ์๋๋ for in ๋ฌธ์์ ์ ์ธ๋๋ค.
extends
ํค์๋๋ฅผ ์ฌ์ฉํด ๊ตฌํํ๋ค.