λͺ©μ°¨
2023.03.31 - [π | WEB DEV/Vanilla JS] - JS_κΈ°λ³Έ λ¬Έλ² (24)_ μμ±μ ν¨μ
μ λ²μ λ€λ£¨μλ μμ±μ ν¨μμ μ΄μ΄μ μ΄λ²μλ ν΄λμ€μ λν΄μ μμ보μ!
1. ν΄λμ€
// ν΄λμ€
class Player {
constructor(name, job){
this.name = name;
this.job = job
}
info () {
return `μνμ¬λͺ
: ${this.name} | μ§μ
κ΅° : ${this.job}`;
}
}
const player1 = new Player('Kassid', 'μ μ¬');
const player2 = new Player('Nyang', 'λ§λ²μ¬');
console.log(player1, player1.info());
console.log(player1, player2.info());
>>> Player {name: 'Kassid', job: 'μ μ¬'} 'μνμ¬λͺ
: Kassid | μ§μ
κ΅° : μ μ¬'
>>> Player {name: 'Kassid', job: 'μ μ¬'} 'μνμ¬λͺ
: Nyang | μ§μ
κ΅° : λ§λ²μ¬'
μ΄μ²λΌ μμ±μ ν¨μλ‘ κ°μ²΄λ₯Ό μμ±νλ κ²κ³Ό λμΌνκ² κ°μ²΄κ° λ§λ€μ΄μ§κ³ κ·Έ κΈ°λ₯μ΄ μ μλνλ κ²μ μ μ μλ€.
νμ§λ§ μμ±μ ν¨μμ νλ‘ν νμ κΈ°λ°μΌλ‘ λ§λλ κ°μ²΄μ
ν΄λμ€λ‘ μμ±νλ κ°μ²΄λ μ°¨μ΄κ° μ‘΄μ¬νλ€!
μμ±μν¨μμ ν΄λμ€μ μ°¨μ΄
μ°¨μ΄ 1) νΈμ΄μ€ν μ
ν¨μ μ μΈ λ°©μμ μμ±μ ν¨μλ νΈμ΄μ€ν μ΄ μ΄λ£¨μ΄μ§ λ μ΄κΈ°νκ° ν¨κ» μ§νλμ΄
μλλλ‘ 'νΈμ΄μ€ν '(μ μΈλΆκ° μλμ μμ΄λ μ μ νΈμΆλλ κ²μ μλ―Έ)μ΄ λ°μνμ§λ§
ν΄λμ€λ uninitializedλ‘ μ΄κΈ°νκ° λκΈ°λλ¬Έμ ReferenceErrorλ₯Ό λ°ννλ€.
cosnt p1 = new Player('Kassid', 'μ μ¬');
class Player{
constructor(name, job) {
this.name = name;
this.job = job;
}
info () {
return `μνμ¬λͺ
: ${this.name} | μ§μ
κ΅° : ${this.job}`;
}
}
>>> Uncaught ReferenceError: Player is not defined
μμΈν λ΄μ©βΌ
2023.03.31 - [π | WEB DEV/Vanilla JS] - JS_κΈ°μ (3)_ Hoisting(νΈμ΄μ€ν ) λΏμκΈ°
μ°¨μ΄ 2) new μ°μ°μλ₯Ό μ¬μ©νμ§ μμμ λ
ν΄λμ€λ new μ°μ°μλ₯Ό μ¬μ©νμ§ μλ κ²½μ° TypeErrorλ₯Ό λ°ννλ€.
const p2 = Player('Tom', 'κΆμ');
>>> Uncaught TypeError: Class constructor Player cannot be invoked without 'new'
λ°λ©΄ μμ±μ ν¨μλ undefinedλ₯Ό λ°ννλ€.
(μ΄λ ES6μ΄ν λ§λ€μ΄μ§ λ¬Έλ²λ€μ 'μ격λͺ¨λ'λΌλ κ²μ΄ μ μ©λμ΄ μκΈ° λλ¬Έμ΄λΌκ³ νλ€!)
μ°¨μ΄ 3) λ©μλ μ μ μμΉ
μμ±μ ν¨μμ ν΄λμ€μ λ©μλλ κ°κ° μ μλ μμΉκ° λ€λ₯΄λ€.
function Person1 (){
this.say(){
return 'μλ
νμΈμ';
}
}
const p1 = new Person1();
console.log(p1);
class Person2{
say(){
return 'μλ
νμΈμ';
}
}
const p2 = new Person2();
console.log(p2);
μ μ½λμ κ²°κ³Όλ μλμ κ°λ€.
μμ±μ ν¨μμμμ λ©μλλ κ°μ²΄ κ·Έ μ체μ μ μ₯νμ§λ§
ν΄λμ€λ νλ‘ν νμ λ΄λΆμ μ μ₯νλ€.
μ΄ λμ μ°¨μ΄λ
κ°μ²΄ μ체μ μ μ₯λμ΄ μμΌλ©΄ κ·Έ λ΄λΆμμ κΈ°λ₯μ νλ κ²μ΄λΌλ©΄
νλ‘ν νμ μ μλ κ²½μ° ν΄λμ€ κ·Έ μ체μμ κ°μ Έλ€κ° κΈ°λ₯μ νλ μ°¨μ΄μ΄λ€.
2. constructor
μΈμ€ν΄μ€λ₯Ό μμ±ν λ μΈμλ₯Ό λ°μμ νλ‘νΌν°λ₯Ό μ΄κΈ°ννλ μν μ νλ λ©μλμ΄λ€.
ν΄λμ€λ§λ€ λ¨ νλμ© μ‘΄μ¬νλ©° κΈ°λ³Έκ° μ€μ μ΄ κ°λ₯νλ€.
class Player{
//constructor λ©μλ name, jobμ μΈμλ‘ λ°λλ€.
constructor(name, job) {
this.name = name;
this.job = job;
}
info () {
return `μνμ¬λͺ
: ${this.name} | μ§μ
κ΅° : ${this.job}`;
}
}
λν constructor λ©μλλ νμμ μΈ κ²μ΄ μλλ€.
λ°λΌμ κ΅³μ΄ μΈμ€ν΄μ€μ μ΄κΈ°νκ° νμμΉ μλ κ²½μ° μ¬μ©νμ§ μμλ λλ€.
class Hey{} // constructorμμ΄ λΉ ν΄λμ€
console.log(new Hey());
3. νλ Field
1) μΌλ° νλ Public Field
ν΄λμ€ λ΄λΆμ νλ‘νΌν°μ λν΄μ μ΄λ―Έ κ°μ΄ μ ν΄μ Έ μλ κ²½μ°
constructor λ©μλλ₯Ό μ¬μ©νμ§ μκ³ νλκ°μ μ§μ νλ λ°©λ²μ μ¬μ©ν μ μλ€.
μμ)
// νλκ°μ μ§μ νλ―λ‘ constructor μμ΄λ λ¨
class Hammer {
durability = 20;
power = 5;
attack (obj){
obj.durability -= this.power;
this.durability -= obj.power;
}
}
class Sword {
durability = 15;
power = 8;
attack (obj){
obj.durability -= this.power;
this.durability -= obj.power;
}
}
const hammer1 = new Hammer();
const sword1 = new Sword();
console.log(hammer1);
console.log(sword1);
>>> Hammer {durability: 20, power: 5}
>>> Sword {durability: 15, power: 8}
μ΄μ²λΌ constructorλ₯Ό μ¬μ©νμ§ μκ³ κ°μ²΄λ₯Ό μμ±ν μ μλ€.
λ κ°μ²΄μ μνΈμμ©λ μ΄ν΄λ³΄μ.
hammer1.attack(sword1);
console.log(hammer1);
console.log(sword1);
>>> Hammer {durability: 12, power: 5}
>>> Sword {durability: 10, power: 8}
λλ€λ₯Έ μμλ₯Ό μ΄ν΄λ³΄μ!
νλκ°μ μ§μ νλ κ²μ constructorμ μΈμμ κΈ°λ³Έκ°μ μ§μ νλ μν μ μνν μ μλ€.
class KassidCafe{
num = 0;
menu = {μλ©λ¦¬μΉ΄λ
Έ: 2500, λ°λλΌλΌλΌ: 4000};
constructor(name, num){
this.name = name;
if (num) this.num = num;
}
info(){
return `| Kassid Cafe ${this.num}νΈ ${this.name}μ |`;
}
order(drink){
return `${drink}λ ${this.menu[drink]}μ μ
λλ€.`;
}
}
λν κ°μ²΄λ§λ€ νμ κ°μ κ°μ κ°μ§κ³ μλ νλ‘νΌν°λ νλκ°μΌλ‘ μ§μ ν μ μλ€.
μμ± ν κ²°κ³Όλ₯Ό μ΄ν΄λ³΄μ.
const cafe1 = new KassidCafe('ν
μ€νΈ');
console.log(cafe1);
κΈ°λ³Έκ°μ΄ μ μ©λμ΄ μ λ°νλ κ²μ μ μ μλ€.
console.log(cafe1.info());
>>> | Kassid Cafe 0νΈ ν
μ€νΈμ |
console.log(cafe1.order('λ°λλΌλΌλΌ'));
>>> λ°λλΌλΌλΌλ 4000μ μ
λλ€.
νλκ°μ κ°μ²΄λ§λ€ λ 립μ μ΄λ€.
λ°λΌμ κ°μ²΄μ λ΄λΆμ μ κ·Όνμ¬ νλ‘νΌν°λ₯Ό μμ ν κ²½μ° ν΄λμ€ μ체μλ 무κ΄νλ―λ‘
ν΄λΉ κ°μ²΄λ§ λ³νκ° μκΈ΄λ€.
cafe1.menu['λ°λλΌλΌλΌ'] = 5000;
console.log(cafe1.order('λ°λλΌλΌλΌ'));
>>> λ°λλΌλΌλΌλ 5000μ μ
λλ€.
// μλ‘μ΄ κ°μ²΄ μμ±
const cafe2 = new KassidCafe('λμ ', 2);
console.log(cafe2.order('λ°λλΌλΌλΌ'));
>>> λ°λλΌλΌλΌλ 4000μ μ
λλ€. // ν΄λμ€ μ μΈ μμ κ° κ·Έλλ‘
2) μ μ νλ
μμ±μ ν¨μμμλ κ°μ²΄λ€μ΄ μλ κ·Έ ν¨μ μ체μ μ¬μ©ν μ μλ κΈ°λ₯μ μΆκ°ν μ μμλ€.
(μμ±μν¨μ.νλ‘νΌν° λ‘ μΆκ°ν λ³μ, ν¨μλ κ°μ²΄μμ μ κ·Όν μ μμλ€.)
ν΄λμ€μμλ μ μ νλλ₯Ό ν΅ν΄ λμΌνκ² κ΅¬νν μ μλ€.
λ€λ₯Έ μΈμ΄μμ λ³Ό μ μλ ν€μλμΈ staticμ μ΄μ©νλ€.
class KassidCafe{
//μ μ λ³μ, λ©μλ
static owner = 'Kassid';
static cafeInfo () {
return `${this.owner}μ KassidCafeμ
λλ€!`
}
num = 0;
menu = {μλ©λ¦¬μΉ΄λ
Έ: 2500, λ°λλΌλΌλΌ: 4000};
constructor(name, num){
this.name = name;
if (num) this.num = num;
}
info(){
return `| Kassid Cafe ${this.num}νΈ ${this.name}μ |`;
}
order(drink){
return `${drink}λ ${this.menu[drink]}μ μ
λλ€.`;
}
}
μ΄λ₯Ό κ°λ¨ν κ·Έλ¦ΌμΌλ‘ μ΄ν΄λ³΄λ©΄ μλμ κ°λ€.
ν΄λμ€ | κ°μ²΄1 | κ°μ²΄2 ... |
owner cafeInfo |
num menu name |
num menu name |
(λ©μλμ 본체λ ν΄λμ€μ νλ‘ν νμ ν 곡κ°μ μ‘΄μ¬ν¨. κ°μ²΄λ§λ€X)
μ μ νλμμ μ£Όμν μ μ
this.~ ν€μλ μ¬μ©μμ κ°μ μ μ λ³μλ§μ μ¬μ©ν μ μλ€λ κ²μ΄λ€!
4. ν΄λμ€ ννμ
ν΄λμ€ λν λ΄λΆμ μΌλ‘ ν¨μλ‘ μΈμνλ€.
class Foo {}
console.log(typeof Foo);
>>> function
λ°λΌμ ν¨μμ²λΌ ν΄λμ€ ννμ λν μ‘΄μ¬νλ€.
// λ³μμ ν΄λμ€λͺ
μ λ΄μ μ μλ€!
const bar = Foo;
const bee = new bar();
console.log(bee);
>>> Foo {} // μΈμ€ν΄μ€ κ°μ²΄ μμ±
'π | WEB DEV > Vanilla JS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
JS_κΈ°λ³Έ λ¬Έλ² (27)_ this ν€μλ (0) | 2023.08.01 |
---|---|
JS_κΈ°λ³Έ λ¬Έλ² (26)_ μ κ·Όμ νλ‘νΌν°μ privateνλ (0) | 2023.04.10 |
JS_κΈ°μ (3)_ Hoisting(νΈμ΄μ€ν ) λΏμκΈ° (0) | 2023.03.31 |
JS_κΈ°λ³Έ λ¬Έλ² (24)_ μμ±μ ν¨μ (0) | 2023.03.31 |
JS_κΈ°λ³Έ λ¬Έλ² (23)_ κ°μ²΄ + (0) | 2023.03.26 |
λκΈ