ES6 ν¨μμ μΆκ° κΈ°λ₯
ν¨μμ ꡬλΆ
es6 μ΄μ μ ν¨μλ μ¬μ© λͺ©μ μ λ°λΌ λͺ ν νκ² κ΅¬λΆ λμ§ μμ
- μΌλ° ν¨μλ‘μ νΈμΆ κ°λ₯
new
μ°μ°μμ ν¨κ» νΈμΆνμ¬ μμ±μ ν¨μλ‘ νΈμΆ κ°λ₯- κ°μ²΄μ λ°μΈλ© λμ΄ λ©μλλ‘μ νΈμΆ κ°λ₯
μ¦, es6μ΄μ μ λͺ¨λ ν¨μλ μΌλ° ν¨μ, μμ±μ ν¨μ λλ€ νΈμΆ κ°λ₯
es6μ΄μ μ λͺ¨λ ν¨μλ
callable
μ΄λ©΄μconstructor
μ΄λ€μ€μλ₯Ό μ λ°ν μ μμΌλ©° μ±λ₯ λ©΄μμλ μν΄
μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ es6μμλ ν¨μλ₯Ό μ¬μ© λͺ©μ μ λ°λΌ μΈ κ°μ§ μ’ λ₯λ‘ λͺ νν ꡬλΆ
ES6 ν¨μμ κ΅¬λΆ |
constructor |
prototype |
super |
arguments |
---|---|---|---|---|
μΌλ° ν¨μ(Normal , ES6 μ΄μ ν¨μ) |
O | O | X | O |
λ©μλ(Method ) |
X | X | O | O |
νμ΄ν(Arrow ) |
X | X | X | X |
- μΌλ° ν¨μλ ν¨μ μ μΈλ¬Έμ΄λ ννμμΌλ‘ μ μν ν¨μ (μ΄μ μ ν¨μμ λμΌ)
- λ©μλμ νμ΄ν ν¨μλ μ΄μ μ ν¨μμ λͺ
νν μ°¨μ΄ μ‘΄μ¬
μΌλ° ν¨μλ
constructor
μ΄μ§λ§ es6μ λ©μλμ νμ΄ν ν¨μλnon-constructor
μ΄λ€.
λ©μλ
- es6 μ¬μμμ λ©μλλ λ©μλ μΆμ½ ννμΌλ‘ μ μλ ν¨μλ§μ μλ―Έ
// ES5
var obj = {
name: 'Lee',
sayHi: function() {
console.log('Hi! ' + this.name);
}
};
/*------------------------------------------------------ */
// ES6
const obj = {
name: 'Lee',
// λ©μλ μΆμ½ νν
sayHi() {
console.log('Hi! ' + this.name);
}
};
- es6μ λ©μλλ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ
non-constructor
ES6
λ©μλλ μμ μ λ°μΈλ©ν κ°μ²΄λ₯Ό κ°λ¦¬ν€λ λ΄λΆ μ¬λ‘―[[HomeObject]]
λ₯Ό κ°μ§.super
μ°Έμ‘°λ λ΄λΆ μ¬λ‘―[[HomeObject]]
λ₯Ό μ¬μ©νμ¬ μνΌ ν΄λμ€μ λ©μλλ₯Ό μ°Έμ‘°νλ―λ‘,[[HomeObject]]
λ₯Ό κ°λES6
λ©μλλsuper
ν€μλλ₯Ό μ¬μ© κ°λ₯.
νμ΄ν ν¨μ
- μ½λ°± ν¨μ λ΄λΆμμ thisκ° μ μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν λμμΌλ‘ μ μ©νλ€.
- ν¨μ ννμμΌλ‘ μ μν΄μΌ νλ€.
- ν¨μ λͺΈμ²΄κ° νλμ λ¬ΈμΌλ‘ ꡬμ±λλ€λ©΄ ν¨μ λͺΈμ²΄λ₯Ό κ°μΈλ μ€κ΄νΈ
{}
λ₯Ό μλ΅ν μ μλ€.
const power = x => x ** 2;
power(2); // 4
μ΄ λ ν¨μ λͺΈμ²΄ λ΄λΆμ λ¬Έμ΄ νκ° λ μ μλ€λ©΄ μ묡μ μΌλ‘ λ°ν, ννμμ΄ μλ λ¬Έμ΄λΌλ©΄ λ°ν ν μ μκΈ° λλ¬Έμ μλ¬
- ν¨μ λͺΈμ²΄μ λ¬Έμ΄ ννμμ΄ μλ λ¬Έμ΄λΌλ©΄ μ€κ΄νΈ μλ΅ λͺ»ν¨
- κ°μ²΄ 리ν°λ΄ λ°ννλ κ²½μ° μκ΄νΈλ‘
()
κ°μΈ μ£Όμ΄μΌ νλ€. - νμ΄ν ν¨μλ μΌκΈ κ°μ²΄ μ΄λ―λ‘ κ³ μ°¨ ν¨μ(
Higher-Order Function
,HOF
)μ μΈμλ‘ μ λ¬ν μ μλ€.
[1,2,3].map(v => v * 2); // [ 2, 4, 6]
- νμ΄ν ν¨μλ μ½λ°±ν¨μλ‘ μ μν λ μ μ©
- μΌλ° ν¨μμ κΈ°λ₯μ κ°λ΅ν νμΌλ©°, thisλ νΈλ¦¬νκ² μ€κ³λμλ€.
νμ΄ν ν¨μμ μΌλ° ν¨μμ μ°¨μ΄
- νμ΄ν ν¨μλ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ
non-constructor
μ΄λ€.
const Foo = () => {};
// νμ΄ν ν¨μλ μμ±μ ν¨μλ‘ νΈμΆ ν μ μλ€.
new Foo(); // TypeError : Foo is not constructor
μΈμ€ν΄μ€λ₯Ό μμ±ν μ μμΌλ―λ‘ prototype νλ‘νΌν°κ° μκ³ νλ‘ν νμ λ μμ±νμ§ μλλ€.
μ€λ³΅λ 맀κ°λ³μ μ΄λ¦μ μ μΈ ν μ μλ€.
- μΌλ° ν¨μλ μ€λ³΅λ 맀κ°λ³μ μ΄λ¦μ μ μΈν΄λ μλ¬ x (
strict mode
μμλ μλ¬)
- μΌλ° ν¨μλ μ€λ³΅λ 맀κ°λ³μ μ΄λ¦μ μ μΈν΄λ μλ¬ x (
νμ΄ν ν¨μλ ν¨μ μ체μ
this
,arguments
,super
,new.target
λ°μΈλ©μ κ°μ§ μλλ€.- νμ΄ν ν¨μ λ΄λΆμμ
this
,arguments
,super
,new.target
μ μ°Έμ‘°νλ©΄ μμ μ€μ½νμ this, arguments, super, new.targetλ₯Ό μ°Έμ‘° - νμ΄ν ν¨μκ° μ€μ²© λμ΄μλ€λ©΄ μμ ν¨μ μ€μμ νμ΄ν ν¨μκ° μλ ν¨μμ
this
,arguments
,super
,new.target
λ₯Ό μ°Έμ‘°
- νμ΄ν ν¨μ λ΄λΆμμ
this
νμ΄ν ν¨μκ° μΌλ° ν¨μμ ꡬλ³λλ κ°μ₯ ν° νΉμ§μ this
νμ΄ν ν¨μλ λ€λ₯Έ ν¨μμ μΈμλ‘ μ λ¬λμ΄ μ½λ°± ν¨μλ‘ μ¬μ©λλ κ²½μ°κ° λ§λ€.
- μΌλ° ν¨μμ thisμ λ€λ₯΄κ² λμνλ μ΄μ : "μ½λ°± ν¨μ λ΄λΆμ this λ¬Έμ "λ₯Ό ν΄κ²°νκΈ° μν΄
μ½λ°± ν¨μ λ΄λΆμ thisκ° μΈλΆ ν¨μμ thisμ λ€λ₯΄κΈ° λλ¬Έμ λ¬Έμ λ°μ
thisλ ν¨μκ° μ΄λ»κ² νΈμΆ λλ μ§μ λ°λΌ λ°μΈλ© λ κ°μ²΄κ° λμ μΌλ‘ κ²°μ λ¨
class Prefixer {
constructor(prefix) {
this.prefix = prefix; // thisλ μμ±ν μΈμ€ν΄μ€μ λ°μΈλ©
}
add(arr) {
return arr.map(function (item) {
// μ½λ°± ν¨μ λ΄λΆμ thisλ undefined
// ν΄λμ€ λ΄λΆλ strict mode, strict modeμμ μΌλ° ν¨μ νΈμΆ μ μ μ κ°μ²΄ μλλΌ undefinedμ this λ°μΈλ©λ¨
return this.prefix + item;
});
}
}
const prefixer = new Prefixer('-webkit-');
prefixer.add([])// μ¬κΈ°μ this λ°μΈλ©λ¨
// μμ±μ λ΄λΆ thisλ ν¨μλ₯Ό νΈμΆν κ°μ²΄(prefixer)μ λ°μΈλ©λ¨
- es6 μ΄μ μ ν΄κ²° λ°©λ²
- thisλ₯Ό ννΌ μν¨ νμ μ½λ°±ν¨μ λ΄λΆμμ μ¬μ©
add(arr) {
// thisλ₯Ό μΌλ¨ ννΌμν¨λ€, μ¬κΈ°μλ thisκ° νΈμΆν κ°μ²΄ κ°λ¦¬ν΄
const that = this;
return arr.map(function (item) {
// this λμ thatμ μ°Έμ‘°νλ€.
return that.prefix + ' ' + item;
});
}
map
μ λλ²μ§Έ μΈμλ‘this
μ λ¬
add(arr) {
return arr.map(function (item) {
return this.prefix + ' ' + item;
}, this); // thisμ λ°μΈλ©λ κ°μ΄ μ½λ°± ν¨μ λ΄λΆμ thisμ λ°μΈλ©λλ€.
}
bind
λ©μλ μ¬μ©
add(arr) {
return arr.map(function (item) {
return this.prefix + ' ' + item;
}.bind(this)); // thisμ λ°μΈλ©λ κ°μ΄ μ½λ°± ν¨μ λ΄λΆμ thisμ λ°μΈλ©λλ€.
}
- es6μμλ νμ΄ν ν¨μλ₯Ό μ¬μ©νμ¬ λ¬Έμ ν΄κ²°
arr(arr) {
return arr.map(item => this.prefix + item);
}
- νμ΄ν ν¨μλ ν¨μ μ체μ this λ°μΈλ©μ κ°μ§ μλλ€.
- νμ΄ν ν¨μ λ΄λΆμμ this μ°Έμ‘°νλ©΄ μμ μ€μ½νμ thisλ₯Ό κ·Έλλ‘ μ°Έμ‘° μ΄λ₯Ό
lexical this
λΌκ³ νλ€.λ§μΉ lexical scope μ²λΌ νμ΄ν ν¨μ λ΄λΆμ thisλ ν¨μκ° μ μλ μμΉμ μν΄ κ²°μ λ¨
- λ§μ½ νμ΄ν ν¨μκ° μ μ ν¨μλΌλ©΄
this
λ μ μ κ°μ²΄ κ°λ¦¬ν¨λ€. (μμ μ€μ½ν λ°λΌ) - νμ΄ν ν¨μλ μ체μ this λ°μΈλ©μ κ°μ§ μκΈ° λλ¬Έμ Function.prototype.
call
,bind
,apply
λ©μλ μ¬μ©ν΄λ λ΄λΆμ this κ΅μ²΄ λΆκ°λ₯ - ν΄λμ€ νλμ ν λΉν νμ΄ν ν¨μλ νλ‘ν νμ λ©μλκ° μλλΌ μΈμ€ν΄μ€μ λ©μλκ° λ¨ => λ©μλ μ μμμλ λ©μλ μΆμ½ νν κΆμ₯
Rest νλΌλ―Έν°
- Rest ν리미ν°(λλ¨Έμ§ λ§€κ°λ³μ)λ 맀κ°λ³μ μ΄λ¦μμ μΈκ²μ μ
...
μ λΆμ¬ μ μν 맀κ°λ³μλ₯Ό μλ―Έ - Rest νλΌλ―Έν°λ ν¨μμ μ λ¬λ μΈμλ€μ λͺ©λ‘μ λ°°μ΄λ‘ λ°λλ€.
function foo(...rest) {
// 맀κ°λ³μ restλ μΈμλ€μ λͺ©λ‘μ λ°°μ΄λ‘ μ λ¬λ°λ Rest νλΌλ―Έν°λ€.
console.log(rest); // [ 1, 2, 3, 4, 5 ]
}
foo(1, 2, 3, 4, 5);
- Rest νλΌλ―Έν°λ μΌλ° λ§€κ° λ³μμ ν¨κ» μ¬μ©ν μ μμΌλ λ°λμ λ§μ§λ§μ μμΌνλ€.
- Rest νλΌλ―Έν°λ λ¨ νλλ§ μ μΈκ°λ₯
function foo(param, ...rest) {
console.log(param); // 1
console.log(rest); // [ 2, 3, 4, 5 ]
}
foo(1, 2, 3, 4, 5);
- ν¨μ κ°μ²΄μ length νλ‘νΌν°μ μν₯ x
function foo(...rest) {}
console.log(foo.length); // 0
function bar(x, ...rest) {}
console.log(bar.length); // 1
Rest νλΌλ―Έν°μ argument κ°μ²΄
- es6μμλ Rest νλΌλ―Έν°λ₯Ό μ¬μ©νμ¬ κ°λ³ μΈμ ν¨μμ μΈμ λͺ©λ‘μ λ°°μ΄λ‘ μ§μ λ°μ μ μλ€.
- ν¨μμ es6 λ©μλλ Rest νλΌλ―Έν°μ argument κ°μ²΄λ₯Ό λͺ¨λ μ¬μ©κ°λ₯
- νμ΄ν ν¨μλ μ체μ argument κ°μ²΄ κ°μ§ μλλ€. λ°λΌμ νμ΄ν ν¨μλ‘ κ°λ³ μΈμ ν¨μ ꡬν μ λ°λμ Rest νλΌλ―Έν° μ¬μ©
'javascript > π study' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[7μ£Όμ°¨ μ€ν°λ]34μ₯-μ΄ν°λ¬λΈ (0) | 2022.03.27 |
---|---|
[7μ£Όμ°¨ μ€ν°λ]33μ₯-Symbol (0) | 2022.03.27 |
[5μ£Όμ°¨ μ€ν°λ]25μ₯-ν΄λμ€ (0) | 2022.03.27 |
[5μ£Όμ°¨ μ€ν°λ]24μ₯-ν΄λ‘μ (0) | 2022.03.27 |
[4μ£Όμ°¨ μ€ν°λ] 23μ₯-μ€ν 컨ν μ€νΈ (0) | 2022.02.23 |
λκΈ