[Javascript-Core] λ©μλ λ΄λΆμμμ this κ·Έλ¦¬κ³ ν¨μμ λ©μλμ μ°¨μ΄μ (λΆμ ) :: JSμμ λ§νλ Thisμ μ νν μλ―Έμ λ€μν μν©μμμ this(2)
μ€λ μμλ³Ό κ²μ thisμ΄λ€.
λλ κ°μ²΄ μ§ν₯ μΈμ΄μΈ javaλ₯Ό λ¨Όμ λ°°μ κΈ° λλ¬Έμ jsμμ λ§νλ thisλ₯Ό λ¨μ§ class λ΄λΆμ νλ‘νΌν°μ λν ν¬μΈν°μν λ‘μ¨ μ΄ν΄λ₯Ό νμμ§λ§, jsμμ λ§νλ thisλ ν¨μ¬ λ€μνκ³ μ¬μ€ν κΈ°λ₯μ μννκ³ μμλ€.
μ€λ κ·Έ μ¬μ€ν κΈ°λ₯λ€μ λν΄μ μ§μ΄λ³΄μ.
ν΄λΉ κΈμ 4λΆμμΌλ‘ λλμ΄μ Έ μμ΅λλ€. thisμ λν λͺ¨λ κ²μ μλ²½ν νμ νκ³ μΆλ€λ©΄ ν λ² λ΄λ³΄λ κ²μ κΆμ₯ν©λλ€.
- μ μ 곡κ°μμμ this
- λ©μλ λ΄λΆμμμ this
- ν¨μ λ΄λΆμμμ this
- μ½λ°± ν¨μμμμ this
What is this

μ΅λμ docsλ₯Ό μ 곡νλ€λ w3cμλ λ€μκ³Ό κ°μ΄ thisμ κΈ°λ₯μ λΆλ₯νλ€.
- λ©μλμμ
thisλ κ·Έμ μ£ΌμΈ κ°μ²΄(Owner Obj)λ₯Ό λ»νλ€. thisκ° λ¨λ μΌλ‘ μ¬μ©λλ©΄ κ·Έκ²μ global κ°μ²΄λ₯Ό λ»νλ€.- ν¨μμμ
thisλ global κ°μ²΄λ₯Ό λ»νλ€. strict modeκ° μ μ©λ ν¨μμμthisλ undefinedμ΄λ€.- μ΄λ²€νΈμμ
thisλ μ΄λ²€νΈλ₯Ό λ°λ elementλ₯Ό λ»νλ€. - call()κ³Ό apply() κ°μ λ©μλμμ
thisλ any objectλ₯Ό λ»νλ€.
κ°κ°μ μλ₯Ό ν΅ν΄μ μ‘°κΈ μ½κ² μ΄ν΄ν΄λ³΄μ.
λͺ¨λ μ리λ₯Ό νμ νλκ²μ΄ κ°μ₯ μ€μνλ€.
λ¨μν μκΈ°λ₯Ό ν΄μ μ¬μ©νλ€λ κ²μ λΉμ₯μ ν¨κ³Όμ μΌμ§ λͺ¨λ₯΄κ² μΌλ μΈμ μ΄λ€ μΈμ΄κ° μ΄λ»κ² μ¬λΌμ§κ³ λ±μ₯ν μ§ λͺ¨λ₯΄λ νμ¬μλ μΈμ΄μ μ¬μ©λ²λ³΄λ¨ μ»΄ν¨ν μ μ¬κ³ κ° μ€μνλ€.
λ©μλ λ΄λΆμμμ this
λ©μλ λ΄λΆμμμ thisλ₯Ό μ΄ν΄νκΈ° μν΄μ λ¨Όμ ν¨μμ λ©μλμ μ°¨μ΄μ λν΄μ μκ³ μμ΄μΌ νλ€.
ν¨μλ₯Ό μ€ννκΈ° μν΄μλ
- ν¨μλ‘μ¨ ν¨μλ₯Ό νΈμΆ
- λ©μλλ‘μ¨ ν¨μλ₯Ό νΈμΆ
μ΄λ κ² λ λ°©λ²μ΄ μ‘΄μ¬νλ€.
μλ μ΄κ² 무μ¨μ΄μΌκΈ°λ?λΌκ³ ν μ μμ§λ§ μ¬μ€ λ©μλλΌλ κ²μ΄ κ°μ²΄ λ΄λΆμμ λμνλ ν¨μλΌλ μ¬μ€μ κΈ°μ΅ν μ μλ€λ©΄ μ΄μΌκΈ°κ° λ¬λΌμ§λ€.
λμ€μ λ°°μ°κ²λ κ²μ΄μ§λ§ ecmascript6μμ μκ°λ class λ΄λΆμ λμνλ ν¨μκ° μλ€κ³ κ°μ ν΄λ³΄μ.
class MyReact extends Component {
render(){
return();
}
}
리μ‘νΈ μ»΄ν¬λνΈλ₯Ό μ μνλ ν΄λμ€μΈλ°, μ¬κΈ°μ render() λ©μλλ μ¬μ€ function render()μ ννμ§λ§ ν΄λμ€(κ°μ²΄) λ΄λΆμ μμΉνκΈ° λλ¬Έμ μμμ μΌλ‘ function ν€μλλ₯Ό μ μΈνμ¬ μ¬μ©νλ€.
ν¨μμ λ©μλμ λν΄μ μ νν ꡬλΆμ ν΄λ³΄μ.
λ©μλ λ΄λΆμμμ thisλ₯Ό μμ보기 μ μ μ΄κ² λΆν° νμ€ν νμ.
ν¨μμ λ©μλμ κ°μ₯ ν° μ°¨μ΄μ μ λ 립μ±μ΄λ€.
ν¨μλ κ·Έ μ체λ‘λ νΌμ μ€νλ μ μμ§λ§, λ©μλλ μμ μ νΈμΆν λμ κ°μ²΄μ κ΄ν λμμ μννλ€.
μμ κ°μ 리μ‘νΈ μ½λλ μ¬μ€ 리μ‘νΈμ μ½μ΄λ₯Ό λΆμν΄λ³Έλ€λ©΄ MyReact.render()λ₯Ό νΈμΆν¨μΌλ‘μ¨ μ»΄ν¬λνΈλ₯Ό λ λλ§ν μ μκ² λλ€.
μ’ λ μ νν μ΄μΌκΈ° νμλ©΄
class HelloComponent extends Component {
render(){
return <div> Hello </div>;
}
}
μμ λ§νλ render()(Helloλ₯Ό μΆλ ₯)μ
class WorldComponent extends Component {
render(){
return <div> World </div>;
}
}
console.log(HelloComponent.render());
console.log(WorldComponent.render());
μμ λ§νλ render()(Worldλ₯Ό μΆλ ₯)μλ μλ‘ λ€λ₯Έ renderμ΄κΈ° λλ¬Έμ μ νν ν΄λμ€(κ°μ²΄)μ μ΄λ¦μ κ΄ν .μ°μ°μΌλ‘ νΈμΆμ ν΄μΌ νλ€.
κ·Έμ λ°ν΄ ν¨μλ
function hello() {
return "hello";
}
function world() {
return "world";
}
console.log(hello());
console.log(world());
μ²λΌ λ 립μ μΌλ‘ ν¨μλͺ μΌλ‘λ νΈμΆμ΄ κ°λ₯νλ€.
λ©μλμ λν μ€ν΄
μ¬λλ€μ΄ λ§μ΄ νκ³ μλ μ€ν΄κ° κ°μ²΄ λ΄λΆμ μ μλ ν¨μλ λͺ¨λ λ©μλλΌκ³ μκ°νλ€.
νμ§λ§ 그건 νλ¦° μ΄μΌκΈ°μΌ μλ μκ³ λ§λ μ΄μΌκΈ°μΌ μλ μλ€.
ν¨μλ ν¨μλ‘μ¨ νΈμΆλλ©΄ ν¨μμ΄κ³ , λ©μλλ‘μ νΈμΆλλ©΄ λ©μλμ΄λ€.
λ§μ΄ μ΄λ ΅μ§ κ°λ¨νλ€.
μ¬κΈ°μ μλμ κ°μ ν¨μλ₯Ό νΈμΆνλ€λ©΄?
class HelloComponent extends Component {
sayHello() {
return "Hello"
}
render(){
return <div> {sayHello()} </div>; // ν΄λμ€ λ΄λΆμμ ν¨μλ‘μ¨ νΈμΆνκΈ° λλ¬Έμ ν¨μ
}
}
console.log(HelloComponent.sayHello()) // . μ°μ°μλ‘ νΈμΆνκΈ° λλ¬Έμ λ©μλ
HelloComponent λ κ°μ²΄(ν΄λμ€)μΈλ°, μ¬κΈ°μ render()μ sayHello()λ μ¬μ€ ν¨μμ΄λ€.
μ΄μ ν¨μμ λ©μλμ λν μ νν μ°¨μ΄λ₯Ό μκ² λμμΌλ―λ‘ λ³Έλ‘ μΈ thisμ λν΄μ μμ보μ.
λ©μλ λ΄λΆμμμ this
thisμλ νΈμΆν 주체μ λν μ λ³΄κ° λ΄κΈ΄λ€.
μ¦ . μ°μ°μ λ°λ‘ μμ μλ κ°μ²΄κ° thisκ° λλ κ²μ΄λ€.
class HelloComponent extends Component {
render(){
return <div> "hello world" </div>;
}
}
console.log(HelloComponent.render(), this);
μ΄λ¬ν μ½λκ° μ‘΄μ¬ν λ κ²°κ³Όλ λ°λ‘ νμ¬ μ°κ΄λ κ°μ²΄ HelloComponentκ° thisBindingλ κ°μ²΄μ΄λ€.
ν¨μμ λ©μλμ λν μ€λͺ
μ μΆκ°νλλΌ μ΄μΌκΈ°κ° λ§μ΄ κΈΈμ΄μ‘μ§λ§ μ°¨λΆν μ½μΌλ©΄ λͺ¨λ μ΄ν΄κ° λ μ λμ λΆλμ΄λΌκ³ μκ°νλ€.
μ΄ν΄κ° μλλ€κ³ , μ€λͺ
μ΄ λ무 μ΄λ ΅λ€κ³ λ무 μ΄λ €μνμ§ λ§κ³ λ³΄κ³ λ λ³΄κ³ λ€λ₯Έ μΌ νκ³ λ€μ λ³΄κ³ λ₯Ό λ°λ³΅νλ©΄ μ΄λ μκ° μ λ μΉ΄ νλ μμ μ΄ μ¬ κ²μ΄λ€. λ λν κ·ΈλμκΈ° λλ¬Έμ λ΄κ° μ μΌ μ μκ³ μλ€. λͺ¨λ ν¬κΈ°νμ§ λ§κ³ νμ΄ν
!!