javascript.info, https://ko.javascript.info/object-methods
PoiemaWeb, https://poiemaweb.com/es6-arrow-function
μ°Έκ³ μ¬μ΄νΈμ λ΄μ©μ κ°μΈμ μΌλ‘ 볡μ΅νκΈ° νΈνλλ‘ μ¬κ΅¬μ±ν κΈμ λλ€.
μμΈν μ€λͺ μ μ°Έκ³ μ¬μ΄νΈλ₯Ό μ΄ν΄λ³΄μκΈ° λ°λλλ€.
μλ°μ€ν¬λ¦½νΈμ this
λ λ€λ₯Έ νλ‘κ·Έλλ° μΈμ΄μ this
μ λμ λ°©μμ΄ λ€λ¦
λλ€. λͺ¨λ ν¨μμμ this
λ₯Ό μ μΈν μ μμ΅λλ€. λ€λ§, ν¨μκ° νΈμΆλκΈ° μ κΉμ§ this
μλ κ°μ΄ ν λΉλμ§ μμ΅λλ€. this
μ κ°μ λ°νμ μ€μ κ²°μ λκ³ , ν¨μκ° μ΄λμ μ μλμλμ§μ μκ΄μμ΄ this
λ .
μμ κ°μ²΄κ° 무μμΈκ°μ λ°λΌ μμ λ‘κ² κ²°μ λ©λλ€.
const person1 = {
name: 'Tomas',
age: 27
};
const person2 = {
name: 'James',
age: 30
};
function sayHi() {
console.log(this.name, this.age);
}
// λ³κ°μ κ°μ²΄μμ λμΌν ν¨μλ₯Ό μ¬μ©ν©λλ€.
person1.f = sayHi;
person2.f = sayHi;
// 'this'λ 'μ (.) μμ' κ°μ²΄λ₯Ό μ°Έμ‘°νκΈ° λλ¬Έμ this κ°μ΄ λ¬λΌμ§λλ€.
person1.f(); // Tomas
person2.f(); // James
this
νΈμΆνκΈ°function sayHi() {
'use strict'
console.log(this);
}
function sayBye() {
console.log(this);
}
sayHi(); // undefined
sayBye(); // window
μλ°μ€ν¬λ¦½νΈμ μ격 λͺ¨λ κΈ°μ€μΌλ‘ μ μ½λλ μ°Έμ‘°ν κ°μ²΄κ° μκΈ° λλ¬Έμ this
λ undefined
λ₯Ό μλ―Έν©λλ€. νμ§λ§ μ격 λͺ¨λκ° μλλΌλ©΄ μ μ κ°μ²΄ window
λ₯Ό μ°Έμ‘°νμ¬ this
λ window
λ₯Ό μλ―Έν©λλ€.
μ΄λ° μμ μ½λλ λκ° μ€μλ‘ μμ±λ κ²½μ°κ° λ§μ΅λλ€. ν¨μ λ³Έλ¬Έμ this
κ° μ¬μ©λμλ€λ©΄, κ°μ²΄ λ΄μμ ν¨μλ₯Ό νΈμΆν κ²μ΄λΌκ³ μμνμλ©΄ λ©λλ€.
λ€λ₯Έ μΈμ΄λ₯Ό μ¬μ©νλ€ μλ°μ€ν¬λ¦½νΈλ‘ λμ΄μ¨ κ°λ°μλ this
λ₯Ό νΌλνκΈ° μ½μ΅λλ€. this
λ νμ λ©μλκ° μ μλ κ°μ²΄λ₯Ό μ°Έμ‘°ν κ²μ΄λΌκ³ μ°©κ°ν©λλ€.
μλ°μ€ν¬λ¦½νΈμμ this
λ λ°νμμ κ²°μ λ©λλ€. λ©μλκ° μ΄λμ μ μλμλμ§μ μκ΄μμ΄ this
λ .
μμ κ°μ²΄κ° 무μμΈκ°μ λ°λΌ μμ λ‘κ² κ²°μ λ©λλ€.
μ΄λ κ² this
κ° λ°νμμ κ²°μ λλ©΄ μ’μ μ λ μκ³ λμ μ λ μμ΅λλ€. ν¨μ(λ©μλ)λ₯Ό νλλ§ λ§λ€μ΄ μ¬λ¬ κ°μ²΄μμ μ¬μ¬μ©ν μ μλ€λ κ²μ μ₯μ μ΄μ§λ§, μ΄λ° μ μ°ν¨μ΄ μ€μλ‘ μ΄μ΄μ§ μ μλ€λ κ²μ λ¨μ μ
λλ€.
μλ°μ€ν¬λ¦½νΈκ° this
λ₯Ό λ€λ£¨λ λ°©μμ΄ μ’μμ§, λμμ§λ μ°λ¦¬κ° νλ¨ν λ¬Έμ κ° μλλλ€. κ°λ°μλ this
μ λμ λ°©μμ μΆ©λΆν μ΄ν΄νκ³ μ₯μ μ μ·¨νλ©΄μ μ€μλ₯Ό νΌνλ λ°λ§ μ§μ€νλ©΄ λ©λλ€.
νμ΄ν ν¨μλ μΌλ° ν¨μμλ λ¬λ¦¬ this
λ₯Ό κ°μ§μ§ μμ΅λλ€. νμ΄ν ν¨μ λ΄λΆμμ this
μ μ κ·Όνλ€λ©΄, μΈλΆ μ€ν 컨ν
μ€νΈμμ this
κ°μ κ°μ Έμ΅λλ€. μλλ sayHi()
ν¨μμ μ€ν μ½ν
μ€νΈ μμ this
λ₯Ό μ°Έμ‘°νκ² λ©λλ€.
const user = {
name: "Tomas",
sayHi() {
const arrow = () => console.log(this.name);
arrow();
}
};
user.sayHi(); // Tomas
λ³κ°μ this
κ° λ§λ€μ΄μ§λ κ²μ μνμ§ μκ³ , μΈλΆ ν¨μμ μλ this
λ₯Ό μ΄μ©νκ³ μΆμ κ²½μ° νμ΄ν ν¨μκ° μ μ©ν©λλ€.
μ΄λ° νΉμ§μ μλ μμμ²λΌ μ¬μ©ν μ μμ΅λλ€.
const group = {
title: 'crew',
students: ['Tomas', 'James', 'Sam'],
showList() {
this.students.forEach(
student => console.log(`${this.title}: ${student}`)
);
}
};
group.showList();
forEach()
λ©μλμ μ½λ°± ν¨μλ‘ νμ΄ν ν¨μλ₯Ό μ¬μ©νκΈ° λλ¬Έμ, νμ΄ν ν¨μ λ΄λΆμ this
λ μΈλΆ ν¨μ showList()
ν¨μμ μ€ν 컨ν
μ€νΈ μμ this
κ°κ³Ό λμΌν΄μ§λλ€.
λ§μ½μ, μ μ½λμμ νμ΄ν ν¨μ λμ μ μΌλ° ν¨μλ₯Ό μ¬μ©νλ€λ©΄ μλ¬κ° λ°μν©λλ€.
const group = {
title: 'crew',
students: ['Tomas', 'James', 'Sam'],
showList() {
'use strict'
this.students.forEach(function(student) {
// TypeError: Cannot read property 'title' of undefined
console.log(`${this.title}: ${student}`);
});
}
};
group.showList();
μ΄ λΆλΆμμ μμμΌν μ μ λ΄λΆν¨μλ μΌλ° ν¨μ, λ©μλ, μ½λ°±ν¨μ μ΄λμμ μ μΈλμλ κ΄κ³μμ΄ this
λ μ μ κ°μ²΄λ₯Ό λ°μΈλ©νκ³ μ격 λͺ¨λμμλ undefined
κ° λ©λλ€. μλ°μ€ν¬λ¦½νΈ μ λ¬Έκ° λκΈλΌμ€ ν¬λ½ν¬λλ βμ΄κ²μ μ€κ³ λ¨κ³μ κ²°ν¨μΌλ‘ λ©μλκ° λ΄λΆ ν¨μλ₯Ό μ¬μ©νμ¬ μμ μ μμ
μ λκ² ν μ μλ€λ κ²μ μλ―Ένλ€.βλΌκ³ λ§ν©λλ€.
μ μ½λμ κ²½μ° forEach()
λ©μλμ μ½λ°± ν¨μλ‘ μΌλ° ν¨μκ° μ¬μ©λμ΄ μ격 λͺ¨λ κΈ°μ€μΌλ‘ this
λ undefined
λ₯Ό κ°λ¦¬ν€κ³ undefined.title
μ΄ λμ΄ μλ¬κ° λ°μν©λλ€.
νμ΄ν ν¨μλ this
κ° μκΈ° λλ¬Έμ νμ΄ν ν¨μλ μμ±μ ν¨μλ‘ μ¬μ©ν μ μμ΅λλ€. νμ΄ν ν¨μλ new
μ ν¨κ² νΈμΆν μ μμ΅λλ€.
addEventListener()
μ μ½λ°± ν¨μμ this
λ addEventListenr()
ν¨μμ λ°μΈλ©λ μμλ₯Ό κ°λ¦¬ν΅λλ€. μ¬κΈ°μ μ½λ°± ν¨μλ₯Ό νμ΄ν ν¨μλ‘ μ μν κ²½μ° this
λ window
λ₯Ό κ°λ¦¬ν€κ³ μ격 λͺ¨λμμλ undefined
λ₯Ό κ°λ¦¬ν΅λλ€.
const button = document.getElementById('myButton');
// μ½λ°± ν¨μλ‘ μΌλ° ν¨μ
button.addEventListener('click', function() {
console.log(this === button); // true
this.innerHTML = 'Clicked button';
});
const button = document.getElementById('myButton');
// μ½λ°± ν¨μλ‘ νμ΄ν ν¨μ
button.addEventListener('click', () => {
console.log(this === window); // true
this.innerHTML = 'Clicked button';
});
apply()
, call()
, bind()
λ ν¨μ κ°μ²΄μ νλ‘ν νμ
κ°μ²΄κ° κ°μ§λ κΈ°λ³Έ λ©μλμ
λλ€.
func.apply(thisArg, [argsArray]);
func.call(thisArg, arg1, arg2, ...);
func.bind(thisArg, arg1, arg2, ...);
thisArg
μΈμλ ν¨μ λ΄λΆμ thisμ λ°μΈλ©ν κ°μ²΄λ₯Ό μλ―Έν©λλ€. argsArray
, arg1
, arg2
λ±μ μΈμλ ν¨μμμ μ¬μ©ν μΈμλ₯Ό μλ―Ένλ©° μ λ¬ν μΈμκ° μμ κ²½μ° μλ΅ κ°λ₯νκ³ , λ©μλ λ³λ‘ μΈμλ₯Ό λκΈ°λ λ°©μμ΄ μ‘°κΈμ© λ€λ¦
λλ€.
μ΄ λ©μλλ€μ νΈμΆνλ 주체λ ν¨μμ΄λ©° λ³Έμ§μ μΈ κΈ°λ₯μ ν¨μλ₯Ό νΈμΆνλ κ²μ
λλ€. λ€λ§ bind()
λ©μλμ κ²½μ° ν¨μλ₯Ό νΈμΆνμ§ μκ³ λ°νλ§ ν©λλ€.
const person = {
name: "name",
speak: function (age, gender) {
console.log(this.name, age, gender);
}
};
const person1 = {
name: "Tomas"
};
const person2 = {
name: "James"
};
const person3 = {
name: "Sam"
};
person.speak.apply(person1, [30, "male"]);
person.speak.call(person2, 25, "female");
const info = person.speak.bind(person3, 15, 'male');
info();
// person.speak.bind(person3, 15, 'male')();
bind()
ν¨μμ κ²½μ° ν¨μλ₯Ό νΈμΆνμ§ μκ³ λ°ννκΈ° λλ¬Έμ λ³μμ λ΄μ νΈμΆνκ² λ©λλ€. μ΄λ¬ν κ²½μ° μ½λκ° κΈΈμ΄μ§λ―λ‘ λ°νλ ν¨μλ₯Ό λ³μμ λ΄μ§μκ³ λ°λ‘ μ€ννλ λ°©λ² λν μμ΅λλ€.
νμ΄ν ν¨μλ this
κ° μμ΄μ μ΄λ€ κ²λ λ°μΈλ©μν€μ§ μμ΅λλ€. κ·Έλμ apply()
, call()
, bind()
λ©μλλ₯Ό μ¬μ©νμ¬ this
λ₯Ό λ³κ²½μν¬ μ μμ΅λλ€.