22.08.19 μμ μ ν΅ν΄ 곡λΆν λ΄μ©λ€μ μ 리νμμ΅λλ€ π
νΌλλ°±μ μΈμ λ νμμ λλ€! π
μλ³μ μμ΄ νλ‘νΌν° ν€λ‘λ§ κ°μ κ°μ Έμ¬ μλ μλ€.
const circle = {
radius: 5,
getDiameter() {
return 2 * circle.radius;
}
}
console.log(circle.getDiameter());
κ·Έλμ circle.radius
λΌκ³ μ°λ κ².
getDiameter ν¨μκ° circleμ fixλμ΄ μκΈ° λλ¬Έμ, κ·Έλ₯ μ’ μλλ κ²μ
νλ‘νΌν°μ κ° : μλ° μ€ν¬λ¦½νΈμμ κ°μΌλ‘ μΈμ λλ λͺ¨λ κ°μ μλ―Έ
ν¨μκ° κ°μ²΄μ λ¬Άμ¬μμ§ μλ€κ³ μκ°νκΈ° μν΄μ, thisλ₯Ό μ¨μΌνλ κ²μ
μλ°μ€ν¬λ¦½νΈμμ thisλ λμ μΌλ‘ κ°μ μμ±ν¨.
λ μ컬 μ€μ½ν
β μμ μ€μ½νλ₯Ό κ²°μ νλ λ°©λ². νΈμΆμ μ΄λμ νλλκ° μ€μν κ²μ΄ μλκ³ , μ΄λμ μ νλλκ° μ€μν κ²μ
const foo = function() {
console.dir(this);
}
// λ¬΄μ¨ ν¨μλ? -> κ·Έλ₯ ν¨μ. μ μνλ κ²μ μ΄λΆμ±μ€μ.
// ES6λΆν°λ ν¨μλ₯Ό ꡬλ³νκΈ° μμν¨!
μ΄λ€ ν¨μλ‘ νΈμΆλμλμ§λ μμ§ λͺ¨λ₯΄κΈ° λλ¬Έμ κ·Έλ₯ ν¨μμΈ κ².
νμ΄ν ν¨μ? non-constructor
μ½λλ₯Ό μ¬μ©νλ©΄μ, ν¨μ μ λΉ μ§μ§ μμΌλ €λ©΄ μ°λ μμ°λ μμμΌλ¨!!!
foo() {
function bar() {
console.log("bar's this: ", this);
}
}
μ¬λ¬ λ² νΈμΆνκΈ° μν΄, κ·Έλ¦¬κ³ foo ν¨μ λ΄μμλ§ μ°λ €κ³ !
μ€μ½νμ μ¬λ¦¬λ μμ¬λ¦¬λλμ μ°¨μ΄
ν¨μ κ°μ²΄λ νΈμΆν μ μλ κ°μ²΄μΌ λΏ, νΈμΆ ν λ λ΄λΆ νλ‘μΈμ€λ μ무 κ΄κ³κ° μμ
ν¨μ κ°μ²΄λ₯Ό λ§λλ κ²μ ν¨μ μ μμ νκ°μ
ν¨μ κ°μ²΄ μμ μλ λ΄λΆ λ©μλμ μ½μ νΈμΆνλ κ² β κ·Έ λ ν¨μ μ½λ λ΄λΆλ₯Ό κ·Έ λκ°μ νκ°νλ κ²μ
ν¨μ κ°μ²΄κ° μμ±λλ€! β ν¨μ λ΄λΆμ λ¬Έμμ΄λ κ°κ³ μλ€.
const f = function (){};
// ν¨μ κ°μ²΄λ§ λ§λ€μ΄μ§
function add (a, b) {
return a + b; // μ΄ λ¬Έμ΄ μ€νλμμ λ, a + bλ₯Ό ν¨
} // μ΄ λ¬Έμ΄ μ€νλμμ λ ν¨μ κ°μ²΄κ° λ§λ€μ΄μ§λ κ²
// λ¬Έ : μ€νμ μ΅μ λ¨μ
ν¨μ νΈμΆκ³Ό μ μμ νκ°λ₯Ό ꡬλΆν΄μ μκ°ν΄μΌ νλλ°,
νκ°λ¨κ³μ λ€μ΄κ°λ€λ κ²μ μ€μ½νλ₯Ό λ§λ λ€λ κ²μ!
Math.max(1, 2, 3)μμ ,
λ μ°μ°μμ
λκΉ? λ!
const arr = [1, 2, 3];
// undefined;
Math.max.apply(null, arr);
// null?
call methodμ λ³Έμ§μ λκ°μ? ν¨μλ μμΉμ νλμ μΌλ§ ν΄μΌν¨!
. μμ κ²μ νΈμΆνλ κ²μ΄ λ³Έμ§
thisλ₯Ό κ°μλΌμ°λ κ²μ΄ λ³Έμ§
κ·Όλ° μ nullμΈκ°? μ΄ μΉκ΅¬λ₯Ό μμ΄λ€λ κ²μ λ΄κΈ° μν΄μ!
callμΌλ‘ λ°κΎΈλ©΄ λ°°μ΄μ΄ λ€μ΄κ°λ κ±°λ λκ°μ. νμ΄μ€μΌ ν¨!
Math.max.call(null, ...arr);
μμ¦μ
Math.max(β¦arr);
νλ©΄ λ¨!
const arr = [1, 2, 3]; μμ λ³΅μ¬ νκ³ μΆμ΄!
[β¦ arr] νλ©΄ λ¨!
μλΉ΅μ μλ₯Έλ€λ κ°λ μΌλ‘ μ¬κΈ°μλΆν° μ¬κΈ°κΉμ§ μλ₯΄κ² λ€λ κ²κ³Ό λΉμ·ν¨
κ²°κ΅ λ³΅μ¬μ λΉμ·ν κ°λ μ!
arr.slice() === arr
arr.slice()[0] === arr[0]
// μμκ°μ κ°λ€. κ°μ²΄κ° λ€λ₯Έ κ²μ!
μ μ¬λ°°μ΄ κ°μ²΄λ₯Ό λ°°μ΄λ‘ λ§λ λ€?
const arrayLike = {0: 1, 1: 2, length: 2};
Array.prototype.slice.call(arrayLike);
λ°°μ΄μ μ§μ§ λ°°μ΄μ΄ μλλ€ β λμ€μ λ°°μ΄ ννΈμμ λ€μ μ΄μΌκΈ°!
[β¦arrayLike]
μ΄λ κ² μ°λ©΄ μλλλ°, μλ? μ μμ κ°μ΄ μ΄ν°λ¬λΈμ΄ μμΌνκΈ° λλ¬Έμ
κ·Έλμ Array.from(arrayLike)
μ΄λ κ² μ¨μΌν¨.
νμ μ κ°μ΄ κ°μ§κ³ μλ€.
μΌλ¨ μ μμ½λ ν¨μμ½λλ₯Ό μ κ²½μ°λ©΄ λλ€
var a = 1; // β νλ‘νΌν°μΌ μ μλ³μμΌ..?
window.a // β κ°λ₯ν¨.
ES5 μμλ μ μ κ°μ²΄κ° μ μ μ€μ½ν μν μ νμ
μ μ μ€μ½ν μν μ νλ μ€νμ΄μ€κ° 2κ°κ° μμ
var a = 1;
var a // μ μ μ½λμ νκ° λ¨κ³μμ (λ°νμ μ΄μ μμ~)
a = 1; // μ μ μ½λμ μ€ν λ¨κ³μμ