νν ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ€λͺ
ν λ λΆμ΄λΉ΅κ³Ό λΆμ΄λΉ΅ νμ λΉκ΅νκ³€ νλ€.
ν΄λμ€λ λΆμ΄λΉ΅μ ν
μ ν΄λΉνκ³ , μΈμ€ν΄μ€ κ°μ²΄(μΈμ€ν΄μ€)λ νλ‘ λ§λ€μ΄μ§ λΆμ΄λΉ΅
μ ν΄λΉνλ€.
μ¦, ν΄λμ€λ₯Ό μ¬μ©νμ¬ λμΌν ν(κΈ°λ₯,μμ)μ κ°λ κ°μ²΄ μ¬λ¬κ°λ₯Ό μμ±ν μ μλ€.
ν΄λμ€λ₯Ό μ¬μ©νλ μ΄μ λ λ€μν κ°μ²΄λ₯Ό λ§λ€κ³ , μ¬μ©νκΈ° μν¨μ΄λ€. μ¦ μ μ°μ±
μ μ΄μ μ λλ€.
μλ μ½λμ κ°μ΄ νλμ λ³μμ λν΄μλ§ λ©μλ νΈμΆμ΄ κ°λ₯ν΄μ§λ€λ©΄ λμΌν κΈ°λ₯μ μννλ λ€λ₯Έ λ³μλ₯Ό
λ§λ€ κ²½μ° μΌμΌν μλ‘ λ³μλ₯Ό λ§λ€κ³ λ³μμ λ©μλλ₯Ό ν λΉν΄μΌ νλ λΆμμ¬κ° μκΈ΄λ€.
let counter1 = {
value: 0,
increase: function() {
this.value++
},
decrease: function() {
this.value--
},
getValue: function() {
return this.value
}
}
μλλ ν΄λ‘μ λͺ¨λ ν¨ν΄
μ μμ΄λ€.
μ΄μ μΌμΌν λ³μμ λ©μλλ₯Ό μ μΈν νμ μμ΄ λ³μμ makeCounter
ν¨μμ νΈμΆλ¬Έμ ν λΉνλ©΄
μ¬λ¬κ°μ λ³μλ₯Ό μμ±ν¨κ³Ό λμμ μ¬μ©ν μ μκ² λλ€.
ν΄λμ€λ λ€μκ³Ό κ°μ κΈ°λ₯μ μννλ€.
νμ§λ§ μλμ μμλ ν΄λμ€λ μλλ©° ν΄λμ€μ κΈ°λ₯μ λΉμ·νκ² κ΅¬ννλ ν¨μμ μμμ΄λ€.
function makeCounter() {
let value = 0;
return {
increase: function() {
value++;
},
decrease: function() {
value--;
},
getValue: function() {
return value;
}
}
}
let counter1 = makeCounter()
counter1.increase()
counter1.getValue() // 1
let counter2 = makeCounter()
counter2.decrease()
counter2.decrease()
counter2.getValue() // -2
ν΄λμ€λ μΌμ’ μ ν¨μμ΄λ©°, classμ μΈμ ν΅ν΄ μμ±νλ€.
μλ‘κ² λμ λ ES6μμ ν΄λμ€λ₯Ό μμ±νλ λ°©λ²μ λ€μκ³Ό κ°λ€.
class
ν€μλλ₯Ό μμ± ν, ν΄λμ€μ μ΄λ¦μ μ μΈν΄μ€λ€. height
, width
μ μΈμ€ν΄μ€ μμ± μ μ§μ νλ κ°μ΄λ€. this
μ ν λΉνλ€λ κ²μ λ§λ€μ΄μ§ μΈμ€ν΄μ€μ height, widthμ λΆμ¬νκ² λ€λ μλ―Έμ΄λ€. class Rectangle {
constructor(height, width) {
this.height = height;
this.width = width;
}
}
}
let rectangle1 = new Rectangle(100,150);
new ν€μλλ₯Ό ν΅ν΄ μμ±μ ν¨μκ° μ€νλλ©° λ³μμ ν΄λμ€μ μ€κ³λ₯Ό κ°μ§ μΈμ€ν΄μ€κ° ν λΉλλ€.
μμ κ°μ΄ let rectangle1 = new Rectangle(100,150);
λ₯Ό μμ±νλ©΄
Rectangle ν΄λμ€μ μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό μμ±νμ¬ λ³μ rectangle1
μ ν λΉνλ€.
μ΄ λ μΈμ€ν΄μ€μ width,height κ°μ κ°κ° 100
, 150
μ΄λ€.
κ°κ°μ μΈμ€ν΄μ€λ ν΄λμ€μ κ³ μ ν μμ±
κ³Ό λ©μλ
λ₯Ό κ°λλ€.
class Rectangle {
constructor(height, width) {
this.height = height;
this.width = width;
}
}
}
μ¬μ€ μμμ μ΄λ―Έ ν΄λμ€ μμ±μ μ μλ₯Ό ν΄ λ μνμ΄λ€.
constructor
λ©μλλ class λ‘ μμ±λ κ°μ²΄λ₯Ό μμ±νκ³ μ΄κΈ°ννκΈ° μν νΉμν λ©μλμ΄λ€.
constructor λ©μλμ parameterκ°μΈ height, widthκ° μΈμ€ν΄μ€μ μμ±μ ν΄λΉνλ€.
("constructor" λΌλ μ΄λ¦μ κ°μ§ νΉμν λ©μλλ ν΄λμ€ μμ ν κ°λ§ μ‘΄μ¬ν μ μλ€.)
this
μ ν λΉνλ€λ κ²μ λ§λ€μ΄μ§ μΈμ€ν΄μ€μ height, widthμ λΆμ¬νκ² λ€λ μλ―Έμ΄λ€.
ν΄λμ€ body λ΄λΆμ λ©μλλ₯Ό μ μν μ μλ€.
λ©μλλ ν΄λμ€ λ΄λΆμ μ μλ ν¨μλΌκ³ μκ°νλ©΄ μ½λ€.
get
ν€μλλ κ°μ²΄μ μμ±μ κΊΌλ΄κΈ° μν΄μ μ¬μ©νλ€.
set
ν€μλλ μ¬μ©μκ° μμ±μ κ°μ μ μ₯ν λ μ€ννλ€. μ μ₯ κ°μ μ μ½μ λκΈ° μν΄μ λ§μ΄ μ¬μ©νλ€.
Rectangle ν΄λμ€ λ΄λΆμ calcArea λ©μλκ° μ μΈλμ΄ μλ€. Rectangle ν΄λμ€μ μμ± κ°μ λ°μ κ²°κ³Όλ₯Ό return
ν΄μ£Όκ³ μλ€.
ν΄λμ€ λ©μλμ νΈμΆμ ν΄λμ€ μΈμ€ν΄μ€κ° ν λΉλ λ³μ.λ©μλ
λ‘ μ¬μ©νλ€.
class Rectangle {
constructor(height, width) {
this.height = height;
this.width = width;
}
// Getter
get area() {
return this.calcArea();
}
// λ©μλ
calcArea() {
return this.height * this.width;
}
}
const square = new Rectangle(10, 10);
console.log(square.area); // 100
prototype
λͺ¨λΈμ μ²μ¬μ§μ λ§λ€ λ μ°λ μν κ°μ²΄
[κ΄λ ¨ ν¬μ€ν ]
https://velog.io/@bommy5799/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%ED%94%84%EB%A1%9C%ED%86%A0%ED%83%80%EC%9E%85-prototype
constructor
μΈμ€ν΄μ€κ° μ΄κΈ°νλ λ μ€ννλ μμ±μ ν¨μ
this
ν¨μκ° μ€νλ λ ν΄λΉ scope λ§λ€ μμ±λλ κ³ μ ν μ€ν.