
β μμ±μ ν¨μ(constructor)
- new μ°μ°μμ ν¨κ» νΈμΆνμ¬ κ°μ²΄(μΈμ€ν΄μ€)λ₯Ό μμ±νλ ν¨μλ₯Ό λ§νλ€.
μμ±μ ν¨μμ μν΄ μμ±λ κ°μ²΄λ₯Ό μΈμ€ν΄μ€(instance)λΌ νλ€.
const person = new Object();
person.name = "Lee";
person.sayHello = function() {
console.log("Hi! My name is " + this.name);
};
console.log(person); // {name: "Lee", sayHello: f}
person.sayHello(); // Hi! My name is Lee
- κ°μ²΄λ₯Ό μμ±νλ λ°©λ²μ κ°μ²΄ 리ν°λ΄μ μ¬μ©νλ κ²μ΄ λ κ°νΈνλ€.
Object μμ±μ ν¨μλ₯Ό μ¬μ©ν΄ κ°μ²΄λ₯Ό μμ±νλ λ°©μμ νΉλ³ν μ΄μ κ° μλ€λ©΄ κ·Έλ€μ§ μ μ©ν΄ 보μ΄μ§ μλλ€.
(νμ§λ§ κ°μ²΄ 리ν°λ΄μ μν κ°μ²΄ μμ± λ°©μμ λ¨ νλμ κ°μ²΄λ§ μμ±νλ€. λ°λΌμ λμΌν νλ‘νΌν°λ₯Ό κ°λ κ°μ²΄λ₯Ό μ¬λ¬ κ° μμ±ν΄μΌ νλ κ²½μ° λ§€λ² κ°μ νλ‘νΌν°λ₯Ό κΈ°μ ν΄μΌ νκΈ° λλ¬Έμ λΉν¨μ¨μ μ΄λ€.)
β μΈμ€ν΄μ€ μμ±κ³Ό this λ°μΈλ©
- μ묡μ μΌλ‘ λΉ κ°μ²΄κ° μμ±λλ€. μ΄ λΉ κ°μ²΄κ° λ°λ‘ (μμ§ μμ±λμ§λ μμμ§λ§) μμ±μ ν¨μκ° μμ±ν μΈμ€ν΄μ€λ€.
κ·Έλ¦¬κ³ μ묡μ μΌλ‘ μμ±λ λΉ κ°μ²΄, μ¦ μΈμ€ν΄μ€λ thisμ λ°μΈλ©λλ€.
μμ±μ ν¨μ λ΄λΆμ thisκ° μμ±μ ν¨μκ° μμ±ν μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν€λ μ΄μ κ° λ°λ‘ μ΄κ²μ΄λ€.(μ΄ μ²λ¦¬λ ν¨μ λͺΈμ²΄μ μ½λκ° ν μ€μ© μ€νλλ λ°νμ μ΄μ μ μ€νλλ€)
- λ§μ½ thisκ° μλ λ€λ₯Έ κ°μ²΄λ₯Ό λͺ μμ μΌλ‘ λ°ννλ©΄ thisκ° λ°νλμ§ λͺ»νκ³ return λ¬Έμ λͺ μν κ°μ²΄κ° λ°νλλ€.
(νμ§λ§ λͺ μμ μΌλ‘ μμ κ°μ λ°ννλ©΄ μμ κ° λ°νμ 무μλκ³ μ묡μ μΌλ‘ thisκ° λ°νλλ€)
- μ΄μ²λΌ μμ±μ ν¨μ λ΄λΆμμ λͺ μμ μΌλ‘ thisκ° μλ λ€λ₯Έ κ°μ λ°ννλ κ²μ μμ±μ ν¨μμ κΈ°λ³Έ λμμ νΌμνλ€.
λ°λΌμ μμ±μ ν¨μ λ΄λΆμμ return λ¬Έμ λ°λμ μλ΅ν΄μΌ νλ€.
β constructorμ non-constructorμ ꡬλΆ
- μλ°μ€ν¬λ¦½νΈ μμ§μ ν¨μ μ μλ₯Ό νκ°νμ¬ ν¨μ κ°μ²΄λ₯Ό μμ±ν λ ν¨μ μ μ λ°©μμ λ°λΌ ν¨μλ₯Ό constructorμ non-constructorλ‘ κ΅¬λΆνλ€.
constructor: ν¨μ μ μΈλ¬Έ, ν¨μ ννμ, ν΄λμ€(ν΄λμ€λ ν¨μλ€)
non-constructor: λ©μλ(ES6 λ©μλ μΆμ½ νν), νμ΄ν ν¨μ
function foo() {}
const bar = function() {};
const baz = {
x: function() {}
};
new foo(); // -> foo {}
new bar(); // -> bar {}
new baz.x(); // -> x {}
const arrow = () => {};
new arrow(); // TypeError: arrow is not a constructor
const obj = {
x() {}
};
new obj.x(); // TypeError: obj.x is not a constructor
β new.target
- μμ±μ ν¨μκ° new μ°μ°μ μμ΄ νΈμΆλλ κ²μ λ°©μ§νκΈ° μν΄ νμ€μΉΌ μΌμ΄μ€ 컨벀μ μ μ¬μ©νλ€ νλλΌλ μ€μλ μΈμ λ λ°μν μ μλ€.
μ΄λ¬ν μνμ±μ ννΌνκΈ° μν΄ ES6μμλ new.targetμ μ§μνλ€.
- new.targetμ thisμ μ μ¬νκ² constructorμΈ λͺ¨λ ν¨μ λ΄λΆμμ μ묡μ μΈ μ§μ λ³μμ κ°μ΄ μ¬μ©λλ©° λ©ν νλ‘νΌν°λΌκ³ λΆλ₯Έλ€.
- new μ°μ°μμ ν¨κ» μμ±μ ν¨μλ‘μ νΈμΆλλ©΄ ν¨μ λ΄λΆμ new.targetμ ν¨μ μμ μ κ°λ¦¬ν¨λ€. new μ°μ°μ μμ΄ μΌλ° ν¨μλ‘μ νΈμΆλ ν¨μ λ΄λΆμ new.targetμ undefinedλ€.
λ°λΌμ ν¨μ λ΄λΆμμ new.targetμ μ¬μ©νμ¬ new μ°μ°μμ μμ±μ ν¨μλ‘μ νΈμΆνλμ§ νμΈνμ¬ κ·Έλ μ§ μμ κ²½μ° new μ°μ°μμ ν¨κ» μ¬κ·νΈμΆμ ν΅ν΄ μμ±μ ν¨μλ‘μ νΈμΆν μ μλ€.
β λΉνΈμΈ μμ±μ ν¨μ
- Objectμ Function μμ±μ ν¨μλ new μ°μ°μ μμ΄ νΈμΆν΄λ new μ°μ°μμ ν¨κ» νΈμΆνμ λμ λμΌνκ² λμνλ€.
νμ§λ§ String, Number, Boolean μμ±μ ν¨μλ new μ°μ°μμ ν¨κ» νΈμΆνμ λ String, Number, Boolean κ°μ²΄λ₯Ό μμ±νμ¬ λ³ννμ§λ§ new μ°μ°μ μμ΄ νΈμΆνλ©΄ λ¬Έμμ΄, μ«μ, λΆλ¦¬μΈ κ°μ λ°ννλ€.
μ΄λ₯Ό ν΅ν΄ λ°μ΄ν° νμ μ λ³ννκΈ°λ νλ€.
'π λͺ¨λ₯λ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| 31μ₯. RegExp(μ κ· ννμ) (3) | 2025.08.27 |
|---|---|
| 23μ₯. μ€ν 컨ν μ€νΈ(LexicalEnvironmentμ VariableEnvironment) (1) | 2025.05.20 |
| 19μ₯. prototypeκ³Ό __proto__μ μ°¨μ΄? (0) | 2025.05.06 |
| 16μ₯. νλ‘νΌν° μ΄νΈλ¦¬λ·°νΈ (0) | 2025.02.28 |