ν°μ€ν 리 λ·°
[JavaScript] μμ±μ ν¨μμ μν κ°μ²΄ μμ±
κ°λ°κ°κ΅΄πΈ 2022. 7. 22. 14:53κ°μ²΄ 리ν°λ΄μ μν κ°μ²΄ μμ±λ°©μμ κ°μ₯ μΌλ°μ μΌκ³ κ°λ¨ν κ°μ²΄ μμ± λ°©μμ λλ€. νμ§λ§, μ΄μΈμλ λ€μν λ°©λ²μΌλ‘ κ°μ²΄λ₯Ό μμ±ν μ μκ³ κ°κ°μ μ₯λ¨μ μ΄ μ‘΄μ¬ν©λλ€.
** κ°μ²΄ 리ν°λ΄μ μν κ°μ²΄ μμ± λ°©μμ λν μμΈν λ΄μ©μ μλλ₯Ό μ°Έκ³ νμΈμ.
https://j-su2.tistory.com/56?category=1037205
Object μμ±μ ν¨μ
new μ°μ°μμ ν¨κ» Object μμ±μ ν¨μλ₯Ό νΈμΆνλ©΄ λΉ κ°μ²΄λ₯Ό μμ±νμ¬ λ°νν©λλ€. μ΄ν νλ‘νΌν° λλ λ©μλλ₯Ό μΆκ°νμ¬ κ°μ²΄λ₯Ό μμ±ν μ μμ΅λλ€. νμ§λ§, Object μμ±μ ν¨μλ₯Ό μ¬μ©ν΄ κ°μ²΄λ₯Ό μμ±νλ λ°©μμ νΉλ³ν μ΄μ κ° μμΌλ©΄ κ·Έλ€μ§ μ μ©νμ§ μμ΅λλ€.
- μμ±μ ν¨μ : new μ°μ°μμ ν¨κ» νΈμΆνμ¬ κ°μ²΄(μΈμ€ν΄μ€)λ₯Ό μμ±νλ ν¨μ
- μΈμ€ν΄μ€ : μμ±μ ν¨μμ μν΄ μμ±λ κ°μ²΄
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 μμ±μ μ΄μΈμλ String, Number, Boolean, Function, Array, Date, RegExp, Promise λ±μ λΉνΈμΈ μμ±μ ν¨μλ₯Ό μ 곡ν©λλ€.
μμ±μ ν¨μ
κ°μ²΄ 리ν°λ΄μ μν κ°μ²΄ μμ± λ°©μμ λ¬Έμ μ
κ°λ¨νμ§λ§ λ¨ νλμ κ°μ²΄λ§μ μμ±νκΈ° λλ¬Έμ λμΌν νλ‘νΌν°λ₯Ό κ°λ κ°μ²΄λ₯Ό μ¬λ¬ κ° μμ±νλ κ²½μ° λΉν¨μ¨μ μ λλ€.
μμ±μ ν¨μμ μν κ°μ²΄ μμ± λ°©μμ μ₯μ
μμ±μ ν¨μμ μν κ°μ²΄ μμ± λ°©μμ λ§μΉ κ°μ²΄(μΈμ€ν΄μ€)λ₯Ό μμ±νκΈ° μν ν νλ¦Ώ(ν΄λμ€)μ²λΌ μμ±μ ν¨μλ₯Ό μ¬μ©νμ¬ νλ‘νΌν° κ΅¬μ‘°κ° λμΌν κ°μ²΄ μ¬λ¬κ°λ₯Ό κ°νΈνκ² μμ±ν μ μμ΅λλ€.
μμ±μ ν¨μλ μ΄λ¦ κ·Έλλ κ°μ²΄(μΈμ€ν΄μ€)λ₯Ό μμ±νλ ν¨μμ λλ€. μλ°μ€ν¬λ¦½νΈλ νμμ΄ μ ν΄μ Έ μμ§ μμμ μΌλ° ν¨μμ λμΌν λ°©λ²μΌλ‘ μμ±μ ν¨μλ₯Ό μ μνκ³ new μ°μ°μμ ν¨κ» νΈμΆνλ©΄ ν΄λΉ ν¨μλ μμ±μ ν¨μλ‘ λμνκ² λ©λλ€.
// μμ±μ ν¨μ
function Circle(radius) {
this.radius = redius;
this.getDiameter = function () {
return 2 * this.radius;
};
}
// μΈμ€ν΄μ€ μμ±
const circle1 = new Circle(5);
const circle2 = new Circle(10);
console.log(circle1.getDiameter()); // 10
console.log(circle2.getDiameter()); // 20
// new μ°μ°μκ° μμ΄μ μΌλ° ν¨μλ‘μ νΈμΆλ¨
const circle3 = Circle(15);
// μΌλ° ν¨μλ‘μ νΈμΆλμ΄ λ°νλ¬Έμ΄ μμ
console.log(circle3); // undefined
// thisλ μ μ κ°μ²΄λ₯Ό κ°λ¦¬ν΄
console.log(radius); // 15
μμ±μ ν¨μμ μΈμ€ν΄μ€ μμ± κ³Όμ
μμ±μ ν¨μμ μν μ μΈμ€ν΄μ€λ₯Ό μμ±(νμ)νκ³ μμ±λ μΈμ€ν΄μ€λ₯Ό μ΄κΈ°ν(μ΅μ )νλ κ²μ λλ€.
- μΈμ€ν΄μ€ μμ±κ³Ό this *λ°μΈλ© : μ묡μ μΌλ‘ λΉ κ°μ²΄κ° μμ±λκ³ thisμ λ°μΈλ©λ¨. λ°νμ μ΄μ μ μ€ν.
- μΈμ€ν΄μ€ μ΄κΈ°ν : μμ±μ ν¨μμ μ½λκ° ν μ€μ© μ€νλμ΄ thisμ λ°μΈλ©λμ΄ μλ μΈμ€ν΄μ€λ₯Ό μ΄κΈ°ν. κ°λ°μκ° κΈ°μ .
- μΈμ€ν΄μ€ λ°ν : μμ±μ ν¨μ λ΄λΆμ λͺ¨λ μ²λ¦¬κ° λλ ν μμ±λ μΈμ€ν΄μ€κ° λ°μΈλ©λ thisκ° μ묡μ μΌλ‘ λ°νλ¨
*λ°μΈλ© : μλ³μμ κ°μ μ°κ²°νλ κ³Όμ
λ΄λΆ λ©μλ [[Call]]κ³Ό [[Construct]]
ν¨μλ κ°μ²΄μ΄κΈ° λλ¬Έμ μΌλ° κ°μ²΄κ° κ°μ§κ³ μλ λ΄λΆ μ¬λ‘―κ³Ό λ΄λΆ λ©μλλ₯Ό λͺ¨λ κ°μ§κ³ μκ³ , [[Environment]], [[FormalParameters]] λ±μ λ΄λΆ μ¬λ‘―κ³Ό [[Call]], [[Construct]] κ°μ λ΄λΆ λ©μλλ₯Ό μΆκ°λ‘ κ°μ§κ³ μμ΅λλ€.
- μΌλ° ν¨μλ‘μ νΈμΆλλ©΄ ν¨μ κ°μ²΄μ λ΄λΆ λ©μλ [[Call]]μ΄ νΈμΆ
- new μ°μ°μμ ν¨κ» μμ±μ ν¨μλ‘μ νΈμΆλλ©΄ λ΄λΆ λ©μλ [[Construct]]κ° νΈμΆ
- callable κ°μ²΄ : [[Call]]μ κ°λ ν¨μ κ°μ²΄λ‘ νΈμΆ κ°λ₯ν ν¨μ
- constructor κ°μ²΄ : [[Construct]]μ κ°λ ν¨μ κ°μ²΄λ‘ μμ±μλ‘ νΈμΆ κ°λ₯ν ν¨μ
- non-constructor κ°μ²΄ : [[Construct]]μ κ°μ§ μλ ν¨μ κ°μ²΄λ‘ μμ±μλ‘ νΈμΆ λΆκ°λ₯ν ν¨μ
λͺ¨λ ν¨μλ callable ν΄μ νΈμΆν μ μμ§λ§, λͺ¨λ ν¨μ κ°μ²΄κ° constructorνκ²μ μλλλ€.
constructorμ non-constructorμ ꡬλΆ
μλ°μ€ν¬λ¦½νΈ μμ§μ ν¨μ μ μλ₯Ό νκ°νμ¬ ν¨μ κ°μ²΄λ₯Ό μμ±ν λ ν¨μ μ μ λ°©μμ λ°λΌ ν¨μλ₯Ό constructorμ non-constructorλ‘ κ΅¬λΆν©λλ€.
- constructor : ν¨μ μ μΈλ¬Έ, ν¨μ ννμ, ν΄λμ€
- non-constructor : λ©μλ(ES6 λ©μλ μΆμ½ νν), νμ΄ν ν¨μ
new μ°μ°μ
μΌλ° ν¨μμ μμ±μ ν¨μμλ νΉλ³ν νμμ μ°¨μ΄ μμ΄ μ€λ‘μ§ new μ°μ°μμ ν¨κ» νΈμΆλμλμ λ°λΌ ꡬλΆλ©λλ€. λ°λΌμ μμ±μ ν¨μλ μΌλ°μ μΌλ‘ 첫 λ¬Έμλ₯Ό λλ¬Έμλ‘ κΈ°μ νλ νμ€μΉΌ μΌμ΄μ€λ‘ λͺ λͺ νμ¬ μΌλ° ν¨μμ ꡬλ³νλλ‘ ν©λλ€.
new.target
new.targetμ new μ°μ°μ μμ΄ μμ±μ ν¨μκ° νΈμΆλλ κ²μ λ°©μ§νκΈ° μν΄ ES6μμ μΆκ°λ κ²μΌλ‘, thisμ μ μ¬νκ² constructorμΈ λͺ¨λ ν¨μ λ΄λΆμμ μ묡μ μΈ μ§μ λ³μμ κ°μ΄ μ¬μ©λλ©° λ©ν νλ‘νΌν°λΌκ³ λ λΆλ¦ λλ€.
(IEλ μ§μX -> μ€μ½ν μΈμ΄ν μμ±μ ν¨ν΄ μ¬μ©)
- new μ°μ°μμ ν¨κ» μμ±μ ν¨μλ‘μ νΈμΆ : ν¨μ λ΄λΆμ new.targetμ ν¨μ μμ μ κ°λ₯΄ν΄
- new μ°μ°μ μμ΄ μΌλ° ν¨μλ‘μ νΈμΆ : ν¨μ λ΄λΆμ new.targetμ undefined
λ°λΌμ ν¨μ λ΄λΆμμ new.targetμ μ¬μ©νμ¬ new μ°μ°μμ μμ±μ ν¨μλ‘μ νΈμΆνλμ§ νμΈνμ¬ κ·Έλ μ§ μμ κ²½μ° new μ°μ°μμ ν¨κ» μ¬κ· νΈμΆμ ν΅ν΄ μμ±μ ν¨μλ‘μ νΈμΆν μ μμ΅λλ€.
// μμ±μ ν¨μ
function Circle(radius) {
// new μ°μ°μμ ν¨κ» νΈμΆλμ§ μμμΌλ©΄ undefined
if(!new.target) {
// new μ°μ°μμ ν¨κ» μμ±μ ν¨μλ₯Ό μ¬κ· νΈμΆνμ¬ μμ±λ μΈμ€ν΄μ€λ₯Ό λ°ν
return new Circle(radius);
}
this.radius = radius;
this.getDiameter = function () {
return 2 * this.radius;
};
}
// new μ°μ°μ μμ΄ νΈμΆν΄λ new.targetμ ν΅ν΄ μμ±μ ν¨μλ‘ νΈμΆ
const circle = Circle(5);
console.log(circle.getDiamater()); // 10
[μΆμ²] λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive
'JavaScript > λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JavaScript] νλ‘ν νμ (0) | 2022.07.24 |
---|---|
[JavaScript] ν¨μμ μΌκΈ κ°μ²΄ (0) | 2022.07.22 |
[JavaScript] νλ‘νΌν° μ΄νΈλ¦¬λ·°νΈ (0) | 2022.07.21 |
[JavaScript] let, const ν€μλμ λΈλ‘ λ 벨 μ€μ½ν (0) | 2022.07.21 |
[JavaScript] μ μ λ³μμ λ¬Έμ μ (0) | 2022.07.21 |
- Total
- Today
- Yesterday
- μλ°μ€ν¬λ¦½νΈ
- μ½λ©ν μ€νΈ
- λ°±μ€
- http
- μ΄μ체μ
- λ°±μ€ javascript
- JavaScript
- μ μ λ³μ
- ν¬ν¬μΈν°
- μ΄λΆνμ
- 2019 μΉ΄μΉ΄μ€ κ°λ°μ κ²¨μΈ μΈν΄
- λμμΈ ν¨ν΄
- μλ°
- map
- μΉ΄μΉ΄μ€ μΈν΄
- μκ³ λ¦¬μ¦
- λͺ¨λ μλ°μ€ν¬λ¦½νΈ deep dive
- νλ‘νΌν°
- λ€μ΄λλ―Ή νλ‘κ·Έλλ°
- fp
- λ°±μ€ node.js
- λ μ컬 νκ²½
- νλ‘κ·Έλλ¨Έμ€
- νλ‘ν μ½
- Baekjoon
- ν¨μν νλ‘κ·Έλλ°
- TDD
- λ€νΈμν¬
- κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°
- git
μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |