λͺ©μ°¨
JSμ μΌκΈ κ°μ²΄μ λν΄μ μμ보μ!
μΌκΈ κ°μ²΄ (First Class Object)
ν¨μλ₯Ό λ³μλ μμμ κ°μ²λΌ λ€λ£° μ μλ μΈμ΄μ μ‘΄μ¬νλ κ°λ μ΄λ€.
JSμ ν¨μλ μ΄μ μνλ€. (JSμ ν¨μλ κ°μ²΄μ ν μ’ λ₯μ΄λ€.)
νΉμ§
1. μμ/λ³μμ ν λΉλ μ μλ€.
2. λ€λ₯Έ ν¨μμ μΈμλ‘ μ λ¬λ μ μλ€.
3. λ€λ₯Έ ν¨μμ κ²°κ³Όκ°μΌλ‘μ λ°νλ μ μλ€.
1. ν λΉ
λ³μ/μμμ ν¨μλͺ μ μλ³μλ‘ λ£μ΄μ ν λΉμν¨λ€.
μ΄λ μ£Όμν μ μ κ΄νΈλ₯Ό λΆμ΄μ§ μλ κ²μ΄λ€. (κ΄νΈλ₯Ό λΆμ΄λ©΄ ν¨μ μ€ν ν λ°ν κ²°κ³Όλ₯Ό ν λΉνλ κ²)
μμ 1)
function isOdd (num) {
console.log(
(num % 2 ? 'ν' : 'μ§')
+ 'μ'
);
return num % 2 ? true : false;
};
const checkOdd = isOdd; //ν¨μλ₯Ό ν λΉν λμλ κ΄νΈλ₯Ό λΆμ΄μ§ μλλ€!
console.log(checkOdd(5));
>>> νμ
>>> true
μμ 2)
νμ΄ν ν¨μλ λ³μ/μμ ν λΉμ μμ μ€ νλμ΄λ€.
let f1 = (a, b) => a + b;
let f2 = (a, b) => a - b;
console.log(f1(2, 1), f2(2, 1));
>>> 3 1
κ°μ²΄μ λ°°μ΄μ κ°μΌλ‘λ ν λΉ κ°λ₯
(1) κ°μ²΄μ νλ‘νΌν°μ ν λΉ
let npc1 = {
name: '',
job: 'μμ μ£ΌμΈ',
msg: function(job){
job ? 'μ΄μμ€μκ² λͺ¨νμ! 무μμ μ¬μ€ν
κ°?' : 'μ΄μμ€μκ² μ΄μ¬μμ¬ λ¬΄μμ μ¬μ€ν
κ°?'
}
}
console.log(npc1.msg(true));
>>> μ΄μμ€μκ² λͺ¨νμ! 무μμ μ¬μ€ν
κ°?
console.log(npc1.msg(false));
>>> μ΄μμ€μκ² μ΄μ¬μμ¬ λ¬΄μμ μ¬μ€ν
κ°?
(2) λ°°μ΄μ μμλ‘ ν λΉ
let funcArr = [
(a, b) => a + b,
(a, b) => a - b,
(a, b) => a * b,
(a, b) => a / b,
];
for (el of funcArr){
console.log(el(4,2));
}
>>> 6
>>> 2
>>> 8
>>> 2
β» κ°μ²΄μ ν¨μ νλ‘νΌν°λ₯Ό ν¬ν¨μν¬ λ μ£Όμν μ !
κ°μ²΄μ ν¨μ νλ‘νΌν°λ₯Ό ν¬ν¨μν¬ λ, κ°μ²΄ λ΄μ λ€λ₯Έ νλ‘νΌν°λ‘μ μ κ·Όμ΄ νμν κ²½μ°κ° μλ€.
μ΄ λ this ν€μλλ₯Ό μ΄μ©νλ©΄ λλ€.
this ν€μλ μ¬μ© μ νμ¬ μν κ°μ²΄λ₯Ό κ°λ¦¬ν€κ² λκ³
this.νλ‘νΌν°λͺ μΌλ‘ νμ©ν μ μλ€.
μ΄λ κ°μ²΄ 리ν°λ΄μ νλ‘νΌν°λ‘ νμ΄ν ν¨μλ₯Ό ν¬ν¨μν€λ κ²½μ° this ν€μλλ₯Ό μ¬μ©ν΄μλ μλλ€.
μ΄λ functionμΌλ‘ μ μλ ν¨μμ νμ΄ν ν¨μμ μ°¨μ΄μ μ΄λ€!
μμΈν κ²μ μΆνμ λ€λ£¨μ΄ 보μ.
2. μΈμλ‘ μ λ¬
ν¨μκ° λ€λ₯Έ ν¨μλ₯Ό μΈμλ‘ λ°μ μ μλ€.
μ΄λ, μ λ¬λ°λ ν¨μλ κ³ μ°¨ ν¨μ, μ λ¬λλ ν¨μλ μ½λ°± ν¨μλΌκ³ νλ€.
μμ 1)
let list = [1, 2, 3, 4];
//κ³ μ°¨ν¨μ(arrayFunc), μ½λ°±ν¨μ(func)
function arrayFunc(arr, func){
for (item of arr){
func(item);
}
}
arrayFunc(list, console.log); //consoleκ°μ²΄μ logλΌλ ν€μ ν λΉλ ν¨μ
>>> 1
>>> 2
>>> 3
>>> 4
μμ²λΌ ν¨μλ₯Ό μΈμλ‘ μ λ¬ λ°μ μ μλ€.
λν ν¨μλ₯Ό μΈμλ‘ λ°μμ λμλ ν΄λΉ ν¨μλ₯Ό 맀κ°λ³μ λͺ μΌλ‘ μ¬μ©νλ€.
μμ 2)
//κ³μ°
const add = (a, b) => a + b;
const subtract = (a, b) => a - b;
const multiply = (a, b) => a * b;
const divide = (a, b) => a / b;
//νλ³
const isOdd = (num) => !!(num % 2); //!!μΌλ‘ νμ¬ boolκ° λ°ν
const isPositive = (num) => num > 0;
function calcAndEval (calc, eval, a, b){
return eval(calc(a, b)); //calcμ λ°ν κ°μ λ€μ μΈμλ‘ λ°μ
}
console.log(
calcAndEval(add, isOdd, 3, 2),
calcAndEval(subtract, isPositive, 2, 3),
calcAndEval(multiply, isOdd, 3, 4),
calcAndEval(divide, isPositive, 3, 2),
);
>>> true false false true
ν¨μλ₯Ό μ λ¬ν λ μ΅λͺ ν¨μλ μ΄μ©ν μ μλ€.
3. κ²°κ³Όκ°μΌλ‘ λ°ν
λ§μ§λ§μΌλ‘ ν¨μμ κ²°κ³Όκ°μΌλ‘ ν¨μλ₯Ό λ°ννλ κ²μ΄ κ°λ₯νλ€.
μμ 1)
function say(name, job){
//ν¨μλ₯Ό λ°ν
return job
? function() {
console.log(`μλ
νμΈμ μ λ ${name}μ΄κ΅¬μ, νμ¬ μ§μ₯μΈμ
λλ€.`);
} : function() {
console.log(`μλ
νμΈμ μ λ ${name}μ΄κ΅¬μ, μμ§ λ°±μμ
λλ€.`);
}
}
// ν¨μλ₯Ό ν λΉ
const TomSay = say('Tom', true);
const DavidSay = say('David', false);
//λ°νλ°μ ν¨μ μ€ν
TomSay();
DavidSay();
>>> μλ
νμΈμ μ λ Tomμ΄κ΅¬μ, νμ¬ μ§μ₯μΈμ
λλ€.
>>> μλ
νμΈμ μ λ Davidμ΄κ΅¬μ, μμ§ λ°±μμ
λλ€.
'π | WEB DEV > Vanilla JS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
JS_κΈ°λ³Έ λ¬Έλ² (22)_ 맀κ°λ³μ (κΈ°λ³Έκ°, arguments, λλ¨Έμ§ λ³μ, μ΄μμ μΈ ν¨μ?) (0) | 2023.03.12 |
---|---|
JS_κΈ°μ (1)_ 컀λ§(currying) (0) | 2023.03.11 |
JS_κΈ°λ³Έ λ¬Έλ² (20)_ for 루ν+ (0) | 2023.03.08 |
JS_κΈ°λ³Έ λ¬Έλ² (19)_ caseλ¬Έ, κ°μ²΄ νμ© λ³ν caseλ¬Έ (0) | 2023.03.07 |
JS_κΈ°λ³Έ λ¬Έλ² (18)_ μ μ΄λ¬Έκ³Ό μ’μ μ½λ? (0) | 2023.03.04 |
λκΈ