19. ν¨μμ μΌκΈ κ°μ²΄
π μΌκΈ κ°μ²΄μ 쑰건
1. λ°νμμ μμ±μ΄ κ°λ₯ν κ°μ²΄
2. λ³μλ μλ£κ΅¬μ‘°μ μ μ₯ν μ μλ κ°μ²΄
3. ν¨μμ λ§€κ°λ³μμ μ λ¬ν μ μλ κ°μ²΄
4. ν¨μμ λ°νκ°μΌλ‘ μ¬μ©ν μ μλ κ°μ²΄
JSλ μ΄ 4κ°μ§λ₯Ό λͺ¨λ λ§μ‘±νκΈ° λλ¬Έμ μΌκΈκ°μ²΄!
π μΌκΈ κ°μ²΄μ νΉμ§
1. ν¨μκ° μΌκΈ κ°μ²΄λΌλκ²μ ν¨μλ₯Ό κ°μ²΄μ λμΌνκ² μ¬μ©ν μ μλ€λ κ².
2. κ·Έλμ κ°μ²΄λ κ°μ΄κΈ° λλ¬Έμ ν¨μλ κ°κ³Ό λμΌνκ² μ·¨κΈλλ€.
3. ν¨μλ κ°μ μ¬μ©ν μ μλ κ³³μ΄λΌλ©΄ μ΄λλ 리ν°λ΄λ‘ μ μν μ μκ³ λ°νμμ ν¨μ κ°μ²΄λ‘ νκ°λλ€.
4. ν¨μμ λ§€κ°λ³μμ μ λ¬ν μ μκ³ ν¨μμ λ°νκ°μΌλ‘λ μ¬μ©ν μ μλ€.
5. μΌλ° κ°μ²΄μμ λ€λ₯Έ μ μ ν¨μ κ°μ²΄λ νΈμΆμ΄ κ°λ₯νλ€.
6. κ·Έλμ ν¨μ κ°μ²΄λ ν¨μ κ³ μ μ νλ‘νΌν°λ₯Ό μμ (μΌλ° κ°μ²΄μλ μμ)
π ν¨μ κ°μ²΄μ νλ‘νΌν°
π£ arguments νλ‘νΌν°
1. arguments κ°μ²΄λ ν¨μ νΈμΆν λ μ λ¬λ μΈμμ μ 보λ₯Ό λ΄κ³ μλ€.
2. μ μ¬ λ°°μ΄ κ°μ²΄μ΄κ³ ν¨μ λ΄λΆμμ μ§μ λ³μμ²λΌ μ¬μ©.
3. JSλ ν¨μ νΈμΆν λ λ§€κ°λ³μ κ°μλ³΄λ€ μΈμλ₯Ό λ λ§£μ΄ μ λ¬νλ©΄ μ΄κ³Όλ μΈμλ 무μλκ³ μλ¬λ λ°μνμ§ μλλ€.
4. 무μλ μΈμν¬ν¨ν΄μ λͺ¨λ μΈμλ μ묡μ μΌλ‘ arguments νλ‘νΌν°λ‘ 보κ΄λλ€.
5. νλ‘νΌν° ν€(μΈμμ μμ) : νλ‘νΌν° κ°(ν¨μκ° νΈμΆλ λμ μΈμ)
6. λ§€κ°λ³μ κ°μλ₯Ό νμ ν μ μλ κ°λ³ μΈμ ν¨μλ₯Ό ꡬνν λ μ μ©νλ€.
7. arguments κ°μ²΄λ μ μ¬λ°°μ΄ κ°μ²΄μ¬μ λ°°μ΄ λ©μλ(map, reduce...)λ₯Ό μ¬μ©νλ©΄ μλ¬κ° λλ€.
8. κ·Έλμ λ°°μ΄ λ©μλλ₯Ό μ¬μ©νλ €λ©΄ Function.prototype.call, Function.prototype.applyλ₯Ό μ¬μ©ν΄ κ°μ νΈμΆν΄μΌ νλ€.
function sum(){
//arguments κ°μ²΄λ₯Ό λ°°μ΄λ‘ λ°ν
const array = Array.prototype.slice.call(arguments);
return array.reduce(function (pre, cur){
return pre + cur;
},0);
}
console.log(sum(1,2)); //3
console.log(sum(1,2,3,4,5)); //15
9. μ΄ λ°©λ²μ λ²κ±°λ‘κΈ° λλ¬Έμ ES6μμ Rest νλΌλ―Έν°λ₯Ό λμ νλ€.
function sum(...args){
return args.reduce((pre, cur)=>pre + cur, 0);
}
console.log(sum(1,2)); //3
console.log(sum(1,2,3,4,5)); //15
π£ caller νλ‘νΌν°
1. ECMAScript μ¬μμ ν¬ν¨λμ§ μμ λΉνμ€ νλ‘νΌν°.
2. νμ€νλ μμ λ μμ΄μ μλ μ λλ‘ λλ΄λ λ¨.
3. ν¨μ μμ μ νΈμΆν ν¨μλ₯Ό κ°λ¦¬ν¨λ€.
π£ length νλ‘νΌν°
1. ν¨μ κ°μ²΄μ length νλ‘νΌν°λ ν¨μλ₯Ό μ μν λ μ μΈν λ§€κ°λ³μμ κ°μλ₯Ό κ°λ¦¬ν¨λ€.
2. arguments κ°μ²΄μ length νλ‘νΌν°λ μΈμμ κ°―μ / ν¨μ κ°μ²΄μ length νλ‘νΌν°λ λ§€κ°λ³μμ κ°μλ₯Ό κ°λ¦¬ν¨λ€.
3. κ·Έλμ arguments κ°μ²΄μ lengthμ ν¨μ κ°μ²΄μ length κ°μ λ€λ₯Ό μ μλ€.
π£ name νλ‘νΌν°
1. ν¨μ κ°μ²΄μ name νλ‘νΌν°λ ν¨μ μ΄λ¦μ λνλΈλ€.
2. ES6λ μ μ νμ€μ΄ λμλ€.
3. ES6λ ν¨μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μλ³μλ₯Ό κ°μΌλ‘ κ°λλ€. (ν¨μ νΈμΆλ ν¨μ μ΄λ¦x, ν¨μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ 'μλ³μ'λ‘ νΈμΆ)
π£ __proto__ μ κ·Όμ νλ‘νΌν°
1. λͺ¨λ κ°μ²΄λ [[Prototype]]μ΄λΌλ λ΄λΆ μ¬λ‘―μ κ°λλ€.
2. λ΄λΆ μ¬λ‘―μλ μ§μ μ κ·Όν μ μκ³ κ°μ μ μΈ μ κ·Ό λ°©λ²μ μ 곡νλ κ²½μ°μ νν΄ μ κ·Όν μ μλ€.
3. __proto__νλ‘νΌν°λ [[Prototype]]λ΄λΆ μ¬λ‘―μ΄ κ°λ¦¬ν€λ νλ‘ν νμ κ°μ²΄μ κ°μ μ μΌλ‘ μ κ·ΌνκΈ°
μν΄μ μ¬μ©νλ μ κ·Όμ νλ‘νΌν°.
π£ prototype νλ‘νΌν°
1. μμ±μ ν¨μλ‘ νΈμΆν μ μλ ν¨μ κ°μ²΄, constructorλ§ μμ νλ νλ‘νΌν°.
2. ν¨μκ° κ°μ²΄λ₯Ό μμ±νλ μμ±μ ν¨μλ‘ νΈμΆλ λ μμ±μ ν¨μκ° μμ±ν μΈμ€ν΄μ€μ νλ‘ν νμ κ°μ²΄λ₯Ό κ°λ¦¬ν΄.
// ν¨μ κ°μ²΄λ prototype νλ‘νΌν°λ₯Ό μμ
(function () {}).hasOwnProperty('prototype'); // true
// μΌλ° κ°μ²΄λ prototype νλ‘νΌν°λ₯Ό μμ νμ§ μλλ€.
({}).hasOwnProperty('prototype'); // false