์๋ฐ์คํฌ๋ฆฝํธ์ ํต์ฌ ํค์๋ ๐this๋ฅผ ๊ทน๋ณตํ์.
1> ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฐฉ์
์ผ๋ก ์์ฑํ ๊ฐ์ฒด๋ ๋ฉ์๋ ๋ด๋ถ์์ ๋ฉ์๋ ์์ ์ด ์ํ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์๋ณ์๋ฅผ ์ฌ๊ท์ ์ผ๋ก ์ฐธ์กฐํ ์ ์๋ค.
<script> const circle = { // ํ๋กํผํฐ: ๊ฐ์ฒด ๊ณ ์ ์ ์ํ radius: 5, // ๋ฉ์๋ : ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ๊ณ ์กฐ์ํ๋ ๋์ getDiameter(){ // ์ด ๋ฉ์๋๊ฐ ์์ ์ด ์ํ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ์ฐธ์กฐํ๋ ค๋ฉด // ์์ ์ด ์ํ ๊ฐ์ฒด์ธ circle์ ์ฐธ์กฐํ ์ ์์ด์ผํ๋ค. return 2 * circle.radius; } }; console.log(circle.getDiameter())</script>
- getDiameter ๋ฉ์๋ ๋ด์์ ๋ฉ์๋๋ ์์ ์ด ์ํ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์๋ณ์ circle์ ์ฐธ์กฐํ๊ณ ์๋ค. ์ด ์ฐธ์กฐ ํํ์์ด ํ๊ฐ๋๋ ์์ ์ getDiameter ๋ฉ์๋๊ฐ ํธ์ถ๋์ด ํจ์ ๋ชธ์ฒด๊ฐ ์คํ๋๋ ์์ ์ด๋ค.
๊ฐ์ฒด ๋ฆฌํฐ๋ด
์ circle ๋ณ์์ ํ ๋น๋๊ธฐ ์ง์ ์ ํ๊ฐ๋๋ค.
๋ฐ๋ผ์ getDiameter ๋ฉ์๋๊ฐ ํธ์ถ๋๋ ์์ ์ ์ด๋ฏธ 1.1>๊ฐ์ฒด ๋ฆฌํฐ๋ด
ํ๊ฐ๊ฐ ์๋ฃ๋์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋์๊ณ 1.2> circle ์๋ณ์์ ์์ฑ๋ ๊ฐ์ฒด๊ฐ ํ ๋น๋ ์ดํ์ด๊ธฐ์ 1.3> ๋ฉ์๋ ๋ด๋ถ์์ circle ์๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.- ๊ทธ๋ฌ๋ ์ด๋ ๊ฒ ์๊ธฐ ์์ ์ด ์ํ ๊ฐ์ฒด๋ฅผ ์ฌ๊ท์ ์ผ๋ก ์ฐธ์กฐํ๋ ๋ฐฉ์์ ์ผ๋ฐ์ ์ด์ง๋ ๋ฐ๋์งํ์ง๋ ์๋ค.
2> ์์ฑ์ ํจ์ ๋ฐฉ์
์ผ๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์.
<script> function Circle(radius){ // ์ด ์์ ์๋ ์์ฑ์ ํจ์ ์์ ์ด ์์ฑํ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ์๋ณ์๋ฅผ ์ ์ ์๋ค. ????.radius = radius } Circle.prototype.getDiameter = function(){ // ์ด ์์ ์๋ ์์ฑ์ ํจ์ ์์ ์ด ์์ฑํ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ์๋ณ์๋ฅผ ์ ์ ์๋ค. return 2 * ????.radius; }; // ์์ฑ์ ํจ์๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ค๋ฉด ๋จผ์ ์์ฑ์ ํจ์๋ฅผ ์ ์ํด์ผํ๋ค. const circle = new Circle(5) </script>
์์ฑ์ ํจ์
๋ด๋ถ์์๋ ํ๋กํผํฐ ๋๋ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด ์์ ์ด ์์ฑ'ํ ' ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ ์ ์์ด์ผํ๋ค.
ํ์ง๋ง์์ฑ์ ํจ์
์ ์ํ ๊ฐ์ฒด ์์ฑ ๋ฐฉ์์ 2.1>๋จผ์ ์์ฑ์ ํจ์
๋ฅผ ์ ์ํ ์ดํ 2.2>new ์ฐ์ฐ์์ ํจ๊ป ์์ฑ์ ํจ์๋ฅผ ํธ์ถํ๋ ๋จ๊ณ๊ฐ ์ถ๊ฐ๋ก ํ์ํ์ฌ
์ฆ,์์ฑ์ ํจ์
๋ 2.2> ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ธฐ ์ํด 2.1> ๋จผ์ ์์ฑ์ ํจ์๊ฐ ์กด์ฌํด์ผํ๋ค.์์ฑ์ ํจ์
๋ฅผ ์ ์ํ๋ ์์ ์๋ ์์ง ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ธฐ ์ด์ ์ด๋ฏ๋ก
์์ฑ์ ํจ์๊ฐ ์์ฑํ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ์๋ณ์๋ฅผ ์ ์ ์๋ค.
๋ฐ๋ผ์ 1>์์ ์ด ์ํ ๊ฐ์ฒด ๋๋ 2>์์ ์ด ์์ฑํ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ํน์ํ ์๋ณ์๊ฐ ํ์ํ๋ค.
์ด๋ฅผ ์ํด ์๋ฐ์คํฌ๋ฆฝํธ๋ this
๋ผ๋ ํน์ํ ์๋ณ์๋ฅผ ์ ๊ณตํ๋ค.
WHAT ISโ
this
๋ 1> ์์ ์ด ์ํ ๊ฐ์ฒด ๋๋ 2> ์์ ์ด ์์ฑํ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋์๊ธฐ ์ฐธ์กฐ ๋ณ์
๋ค.this
๋ฅผ ํตํด ์์ ์ด ์ํ ๊ฐ์ฒด ๋๋ ์์ ์ด ์์ฑํ ์ธ์คํด์ค์ ํ๋กํผํฐ๋ ๋ฉ์๋๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.this
๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ํด ์๋ฌต์ ์ผ๋ก ์์ฑ๋๋ฉฐ ์ฝ๋ ์ด๋์๋ ์ฐธ์กฐํ ์ ์๊ณ ํจ์๋ฅผ ํธ์ถํ๋ฉด arguments ๊ฐ์ฒด์this
๊ฐ ์๋ฌต์ ์ผ๋ก ํจ์ ๋ด๋ถ์ ์ ๋ฌ๋์ด ํจ์ ๋ด๋ถ์์ argument ๊ฐ์ฒด๋ฅผ ์ง์ญ ๋ณ์์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฏthis
๋ ์ง์ญ ๋ณ์์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.- ๋จ
this
๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ, ์ฆ๐this ๋ฐ์ธ๋ฉ
์ ํจ์ ํธ์ถ ๋ฐฉ์์ ์ํด ๋์ ์ผ๋ก ๊ฒฐ์ ๋๋ค.
๐this ๋ฐ์ธ๋ฉ
๋ฐ์ธ๋ฉ
์ด๋ ์๋ณ์์ ๊ฐ์์ฐ๊ฒฐ
ํ๋ ๊ณผ์ ์ ์๋ฏธํ๋ค.- EX> 1. ๋ณ์ ์ ์ธ = ๋ณ์ ์ด๋ฆ(์๋ณ์) - ํ๋ณด๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฃผ์
๋ฐ์ธ๋ฉ
&
๐this ๋ฐ์ธ๋ฉ
=this
(ํค์๋ ๋ถ๋ฅ๋์ง๋ง ์๋ณ์ ์ญํ )์ this๊ฐ ๊ฐ๋ฆฌํฌ ๊ฐ์ฒด๋ฐ์ธ๋ฉ
(์ฐ๊ฒฐ)
๊ฐ์ฒด ๋ฆฌํฐ๋ด
๊ณผ 2>์์ฑ์ ํจ์
๋ฅผ this๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ ์ฝ๋ <script> // 2> ๊ฐ์ฒด ๋ฆฌํฐ๋ด const circle = { radius: 5, getDiameter(){ // this๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค. return 2 * this.radius; } }; console.log(circle.getDiameter()) // 10 // 2> ์์ฑ์ ํจ์ function Circle(radius){ // this๋ ์์ฑ์ ํจ์๊ฐ ์์ฑํ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํจ๋ค. this.radius = radius } Circle.prototype.getDiameter = function(){ // this๋ ์์ฑ์ ํจ์๊ฐ ์์ฑํ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํจ๋ค. return 2 * this.radius; }; //์ธ์คํด์ค ์์ฑ const circle = new Circle(5) console.log(circle.getDiameter()) / 10 </script>
1>
๊ฐ์ฒด ๋ฆฌํฐ๋ด
์ ๋ฉ์๋ ๋ด๋ถ์์this
๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด, circle์ ๊ฐ๋ฆฌํจ๋ค.
2>์์ฑ์ ํจ์
๋ด๋ถ์this
๋ ์์ฑ์ ํจ์๊ฐ ์์ฑ'ํ ' ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
=> ์ด์ฒ๋ผthis
๋ ์ํฉ์ ๋ฐ๋ผ ๊ฐ๋ฆฌํค๋ ๋์์ด ๋ค๋ฅด๋ค.
=> ์๋ฐ์คํฌ๋ฆฝํธ์this
๋ ํจ์๊ฐ ํธ์ถ๋๋ ๋ฐฉ์์ ๋ฐ๋ผthis
์ ๋ฐ์ธ๋ฉ ๋ ๊ฐ,
๐this ๋ฐ์ธ๋ฉ
์ด '๋์ '์ผ๋ก ๊ฒฐ์ ๋๋ค.
this
๋ ์ฝ๋ ์ด๋์์๋ ์ฐธ์กฐ ๊ฐ๋ฅํด ์ ์ญ์์๋ ํจ์ ๋ด๋ถ์์๋ ์ฐธ์กฐ ํ ์ ์๋ค.<script> // this๋ ์ด๋์๋ ์ฐธ์กฐ๊ฐ๋ฅ // ์ ์ญ์์ this๋ ์ ์ญ ๊ฐ์ฒด window ๊ฐ๋ฆฌํจ๋ค console.log(this) // window function square(num){ // ์ผ๋ฐ ํจ์ ๋ด๋ถ์ this๋ ์ ์ญ ๊ฐ์ฒด window๋ฅผ ๊ฐ๋ฆฌํด console.log(this) // window return num * num; } square(3); const person = { name : 'jamie', // ๋ฉ์๋ ๋ด๋ถ์์ this๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํด getName() { console.log(this); // person { name: jamie,getName: f} return this.name } } console.log(person.getName()) // jamie function Person(name){ this.name = name // ์์ฑ์ ํจ์ ๋ด๋ถ์์ this๋ ์์ฑ์ ํจ์๊ฐ ์์ฑํ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํด console.log(this); // Person {name: 'jamie'} } const me = new Person('jamie') </script>
this
๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ ๋ฉ์๋๋ฅผ ์ฐธ์กฐํ๊ธฐ ์ํ ์๊ธฐ ์ฐธ์กฐ ๋ณ์๋ก ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฒด์ ๋ฉ์๋ ๋ด๋ถ ๋๋ ์์ฑ์ ํจ์ ๋ด๋ถ์์๋ง ์๋ฏธ๊ฐ ์๋ค.
๐this ๋ฐ์ธ๋ฉ(this์ ๋ฐ์ธ๋ฉ๋ ๊ฐ)
์ ํจ์ ํธ์ถ ๋ฐฉ์, ํจ์๊ฐ ์ด๋ป๊ฒ ํธ์ถ๋์๋์ง์ ๋ฐ๋ผ ๋์ ์ผ๋ก ๊ฒฐ์ ๋๋ค.
-๐๋ ์์ปฌ ์ค์ฝํ
์ ๐this ๋ฐ์ธ๋ฉ
์ ๊ฒฐ์ ์๊ธฐ๊ฐ ๋ค๋ฅด๋ค.
-ํจ์์ ์์ ์ค์ฝํ๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐฉ์์ธ **
๐๋ ์์ปฌ ์ค์ฝํ
๋ํจ์ ์ ์๊ฐ ํ๊ฐ๋์ด ํจ์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ ์์
์ ์์ ์ค์ฝํ๋ฅผ ๊ฒฐ์ ํ๋ค.
- ๋ฐ๋ฉด
๐this ๋ฐ์ธ๋ฉ
์ํจ์ ํธ์ถ ์์
์ this์ ๋ฐ์ธ๋ฉ ๋ ๊ฐ์ด ๊ฒฐ์ ๋๋ค.
- ์ผ๋ฐ ํจ์ ํธ์ถ
- ๋ฉ์๋ ํธ์ถ
- ์์ฑ์ ํจ์ ํธ์ถ
- Function.prototype.apply/call/bind ๋ฉ์๋์ ์ํ ๊ฐ์ ํธ์ถ
<script> // this ๋ฐ์ธ๋ฉ์ ํจ์ ํธ์ถ ๋ฐฉ์์ ๋ฐ๋ผ ๊ฒฐ์ const foo = function (){ console.dir(this) }; // ๋์ผํ ํจ์๋ ๋ค์ํ ๋ฐฉ์์ผ๋ก ํธ์ถ ๊ฐ๋ฅ // 1. ์ผ๋ฐ ํจ์ ํธ์ถ // foo ํจ์๋ฅผ ์ผ๋ฐ์ ์ธ ๋ฐฉ์์ผ๋ก ํธ์ถ // => ํจ์ ๋ด๋ถ์ this๋ '์ ์ญ ๊ฐ์ฒด' window ๊ฐ๋ฆฌํด //foo(); // window // 2. ๋ฉ์๋ ํธ์ถ // foo ํจ์๋ฅผ ํ๋กํผํฐ ๊ฐ์ผ๋ก ํ ๋นํ์ฌ ํธ์ถ // => foo ํจ์ ๋ด๋ถ์ this๋ '๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด' obj ๊ฐ๋ฆฌํด const obj = { foo }; obj.foo(); // obj { foo: f } // 3. ์์ฑ์ ํจ์ ํธ์ถ // foo ํจ์๋ฅผ new ์ฐ์ฐ์์ ํจ๊ป ์์ฑ์ ํจ์๋ก ํธ์ถ // => foo ํจ์ ๋ด๋ถ์ this๋ '์์ฑ์ ํจ์๊ฐ ์์ฑํ ์ธ์คํด์ค' ๊ฐ๋ฆฌํด new foo(); // foo {}; // 4. Function.prototype.apply/call/bind ๋ฉ์๋์ ์ํ ๊ฐ์ ํธ์ถ // => foo ํจ์ ๋ด๋ถ์ this๋ '์ธ์์ ์ํด ๊ฒฐ์ ' const bar = {name: 'bar'}; foo.call(bar) // bar foo.apply(bar) // bar foo.bind(bar)(); // bar </script>
this
์ ์ ์ญ๊ฐ์ฒด
๊ฐ ๋ฐ์ธ๋ฉ๋๋ค.
- ์ ์ญ ํจ์, ์ค์ฒฉ ํจ์๋ฅผ 2.1>
์ผ๋ฐ ํจ์๋ก ํธ์ถ
ํ๋ฉด ํจ์ ๋ด๋ถ์this
์๋ ์ ์ญ ๊ฐ์ฒด๊ฐ ๋ฐ์ธ๋ฉ๋๋ค.- ๋ค๋ง
this
๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ ๋ฉ์๋๋ฅผ ์ฐธ์กฐํ๊ธฐ ์ํ ์๊ธฐ ์ฐธ์กฐ ๋ณ์์ด๋ฏ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๋ ์ผ๋ฐ ํจ์์๋ this๋ ์๋ฏธ๊ฐ ์์ด stric mode๊ฐ ์ ์ฉ๋ ์ผ๋ฐ ํจ์ ๋ด๋ถ์ this์ undefined๊ฐ ๋ฐ์ธ๋ฉ๋๋ค.<script> function foo(){ // 'use strict' ๋ชจ๋์์ ๋ชจ๋ undefined console.log(`foo's this ${this}`)// window function bar { console.log(`bar's this ${this}`)// window } bar(); } foo(); </script>
- ๋ฉ์๋ ๋ด์์ ์ ์ํ ์ค์ฒฉ ํจ์๋ 2.1>
์ผ๋ฐ ํจ์๋ก ํธ์ถ
๋๋ฉด ์ค์ฒฉ ํจ์ ๋ด๋ถ์this
๋ ์ ์ญ๊ฐ์ฒด๊ฐ ๋ฐ์ธ๋ฉ๋๋ค.<script> // var ํค์๋ ์ ์ธํ ์ ์ญ๋ณ์ value๋ ์ ์ญ ๊ฐ์ฒด ํ๋กํผํฐ var value = 1; // const ํค์๋ ์ ์ธํ ์ ์ญ ๋ณ์ value๋ ์ ์ญ ๊ฐ์ฒด ํ๋กํผํฐX // const value = 1; const obj = { value : 100, foo () { console.log(`foo's this ${this}`)// "foo's this obj {value:100, foo: f } console.log(`foo's this.value ${this.value}`)// "foo's this.value 100" // ๋ฉ์๋ ๋ด์์ ์ ์ํ ์ค์ฒฉํจ์ function bar(){ console.log(`bar's this ${this}`)// window console.log(`bar's this.value ${this.value}`)// 1 // ๋ฉ์๋ ๋ด์์ ์ ์ํ ์ค์ฒฉํจ์๋ฅผ ์ผ๋ฐํจ์๋ก ํธ์ถํ๋ฉด // ์ค์ฒฉํจ์ ๋ด๋ถ์ this์ ์ ์ญ๊ฐ์ฒด ๋ฐ์ธ๋ฉ } bar(); } }; obj.foo(); </script>
- ์ฝ๋ฐฑ ํจ์๊ฐ 2.1>
์ผ๋ฐ ํจ์๋ก ํธ์ถ
๋๋ค๋ฉด ์ฝ๋ฐฑ ํจ์ ๋ด๋ถ์this
์๋ ์ ์ญ ๊ฐ์ฒด๊ฐ ๋ฐ์ธ๋ฉ๋๋ค.<script> // var ํค์๋ ์ ์ธํ ์ ์ญ๋ณ์ value๋ ์ ์ญ ๊ฐ์ฒด ํ๋กํผํฐ var value = 1; // const ํค์๋ ์ ์ธํ ์ ์ญ ๋ณ์ value๋ ์ ์ญ ๊ฐ์ฒด ํ๋กํผํฐX // const value = 1; const obj = { value : 100, foo () { console.log(`foo's this ${this}`)// "foo's this : obj {value:100, foo: f } // ์ฝ๋ฐฑ ํจ์ ๋ด๋ถ์ this์ ์ ์ญ๊ฐ์ฒด ๋ฐ์ธ๋ฉ setTimeout(function(){ console.log(`callback's this ${this}`)// "callback's this : objectwindow" console.log(`callback's this.value ${this.value}`)// "callback's this.value : 1" }, 100); } }; obj.foo(); </script>
- ์ด์ฒ๋ผ
์ผ๋ฐ ํจ์๋ก ํธ์ถ
๋ ๋ชจ๋ ํจ์(์ค์ฒฉ, ์ฝ๋ฐฑ ํจ์ ํฌํจ) ๋ด๋ถ์this
์ ์ ์ญ๊ฐ์ฒด๊ฐ ๋ฐ์ธ๋ฉ๋๋ค
-๋ฌธ์ ์
- ๋ฉ์๋ ๋ด์์ ์ ์ํ ์ค์ฒฉ ํจ์ ๋๋ ๋ฉ์๋์๊ฒ ์ ๋ฌํ ์ฝ๋ฐฑ ํจ์๊ฐ
2.1>์ผ๋ฐ ํจ์๋ก ํธ์ถ
๋ ๋ ์ค์ฒฉ ํจ์ ๋๋ ์ฝ๋ฐฑ ํจ์์this
๊ฐ ์ ์ญ ๊ฐ์ฒด๋ฅผ ๋ฐ์ธ๋ฉํ๋ ๊ฑด ๋ฌธ์ ๊ฐ ์๋ค.- ์ค์ฒฉ ํจ์ ๋๋ ์ฝ๋ฐฑ ํจ์(๋ณด์กฐํจ์)๋ ์ธ๋ถ ํจ์๋ฅผ ๋๋ 'ํฌํผ ํจ์'์ ์ญํ ์ ํ๊ธฐ์
์ธ๋ถ ํจ์์ ์ผ๋ถ ๋ก์ง์ ๋์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ด๋ค,
๋ฐ๋ผ์ ์ธ๋ถ ํจ์์ธ ๋ฉ์๋์ ์ค์ฒฉํจ์ ๋๋ ์ฝ๋ฐฑํจ์์ this๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด ์ค์ฒฉ ํจ์ ๋๋ ์ฝ๋ฐฑ ํจ์๋ฅผ 'ํฌํผ ํจ์'๋ก ๋์ํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ ๋ค.
-ํด๊ฒฐ์ฑ -
- ๋ฉ์๋ ๋ด๋ถ์ ์ค์ฒฉ ํจ์๋ ์ฝ๋ฐฑ ํจ์์
this ๋ฐ์ธ๋ฉ
์ ๋ฉ์๋์this ๋ฐ์ธ๋ฉ
๊ณผ ์ผ์น์ํค๊ธฐ ์ํ ๋ฐฉ๋ฒ๋ค์ด ์๋ค.<script> var value = 1; const obj = { value : 100, foo () { // ๋ฐฉ๋ฒ 1. this ๋ฐ์ธ๋ฉ(obj)์ ๋ณ์์ ํ ๋น const that = this console.log(`foo's this ${this}`)// "foo's this : obj {value:100, foo: f } // ์ฝ๋ฐฑ ํจ์ ๋ด๋ถ์ this๋์ that์ ์ฐธ์กฐ setTimeout(function(){ console.log(`callback's this.value : ${that.value}`)// "callback's this.value : 100" }, 100); // ๋ฐฉ๋ฒ 2. bind ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ฝ๋ฐฑ ํจ์์ ๋ช ์์ ์ผ๋ก this๋ฅผ ๋ฐ์ธ๋ฉ /*setTimeout(function(){ console.log(`callback's this.value : ${that.value}`)// "callback's this.value : 100" }.bind(this),100}; */ // ๋ฐฉ๋ฒ 3. ํ์ดํ ํจ์ ๋ด๋ถ์ this๋ ์์ ์ค์ฝํ์ this๋ฅผ ๋ฐ์ธ๋ฉ /*setTimeout(() => console.log(`callback's this.value : ${that.value}`,100) // "callback's this.value : 100" */ } }; obj.foo(); </script>
- ๋ฐฉ๋ฒ 2> ๋
this
๋ฅผ ๋ช ์์ ์ผ๋ก ๋ฐ์ธ๋ฉ ํ ์ ์๋Function.prototype.apply/call/bind ๋ฉ์๋๋ฅผ
์ฌ์ฉํ๋ ๊ฒ์ด๊ณ
๋ฐฉ๋ฒ 3> ์ ํ์ดํ ํจ์๋ฅผ ์ฌ์ฉํด this๋ฅผ ์ผ์น์๋ ๊ฒ์ด๋ค.
this
์๋ 2.2.> ๋ฉ์๋๋ฅผ ํธ์ถ
ํ ๊ฐ์ฒด, 2.2.>๋ฉ์๋๋ฅผ ํธ์ถ
ํ ๋ ๋ฉ์๋ ์ด๋ฆ ์์ ๋ง์นจํ(.) ์ฐ์ฐ์ ์์ ๊ธฐ์ ํ ๊ฐ์ฒด
๊ฐ ๋ฐ์ธ๋ฉ๋๋ค.
- ์ฃผ์ ํ ๊ฑด ๋ฉ์๋ ๋ด๋ถ์
this
๋๋ฉ์๋๋ฅผ ์์ ํ ๊ฐ์ฒด๊ฐ ์๋๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ
๋๋ค๋ ๊ฒ์ด๋ค.<script> const person = { name : 'jamie', getName () { // ๋ฉ์๋ ๋ด๋ถ์ this๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ return this.name; } }; // => ๋ฉ์๋ getName()์ ํธ์ถํ ๊ฐ์ฒด๋ person์ด๋ค. console.log(person.getName()); // jamie const anotherPerson = { name: 'Kim' }; // 1> getName ๋ฉ์๋๋ฅผ anotherPerson ๊ฐ์ฒด์ ๋ฉ์๋๋ก ํ ๋น anotherPerson.getName = person.getName; // getName ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด๋ anotherPerson console.log(anotherPerson.getName()); // kim // getName ๋ฉ์๋๋ฅผ ๋ณ์์ ํ ๋น const getName = person.getName; // 2> getName ๋ฉ์๋๋ฅผ 1. ์ผ๋ฐ ํจ์๋ก ํธ์ถ // ์ผ๋ฐ ํจ์๋ก ํธ์ถํ getName ํจ์ ๋ด๋ถ์ this.name์ // ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ window.name๊ณผ ๊ฐ๋ค. console.log(getName()); // '' </script>
- getName ๋ฉ์๋๋ ํ๋กํผํฐ์ ๋ฐ์ธ๋ฉ๋ ํจ์๋ก์ person ๊ฐ์ฒด์ ๋ฉ์๋๋ก ์ ์๋์ด person ๊ฐ์ฒด์ getName ํ๋กํผํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ํจ์ ๊ฐ์ฒด๋
person ๊ฐ์ฒด์ ํฌํจ๋ ๊ฒ์ด ์๋๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๋ ๋ณ๋์ ๊ฐ์ฒด๋ก getName ํ๋กํผํฐ๊ฐ ํจ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค.
- getName ํ๋กํผํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ํจ์ ๊ฐ์ฒด, getName ๋ฉ์๋๋ ์ ์ฝ๋ ์์ ์ฒ๋ผ
1> ๋ค๋ฅธ ๊ฐ์ฒด์ ํ๋กํผํฐ์ ํ ๋นํ๋ ๊ฒ์ผ๋ก ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ฉ์๋๊ฐ ๋ ์ ๋ ์๊ณ ,
2> ์ผ๋ฐ ๋ณ์์ ํ ๋นํ์ฌ ์ผ๋ฐ ํจ์๋ก ํธ์ถ ๋ ์ ๋ ์๋ค.
=> ๋ฐ๋ผ์ ๋ฉ์๋ ๋ด๋ถ์this
๋ ํ๋กํผํฐ๋ก๋ฉ์๋๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ ๊ฐ์ฒด์ ๊ด๊ณ์๊ณ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ
๋๋ค.
- ํ๋กํ ํ์ ๋ฉ์๋ ๋ด๋ถ์์ ์ฌ์ฉ๋
this
๋ ์ผ๋ฐ ๋ฉ์๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ํด๋น๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ
๋๋ค.
<script> function Person(name) { return this.name = name; } Person.prototype.getName = function(){ return this.name } const me = new Person('Kim'); // 1> getName ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด๋ me console.log(me.getName());// => Kim Person.prototype.name = 'Jamie'; // 2> getName ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด๋ Person.prototype console.log(Person.prototype.getName());// => Jamie </script>
- 1๋ฒ> ๊ฒฝ์ฐ getName
๋ฉ์๋๋ฅผ ํธ์ถ
ํ ๊ฐ์ฒด๋ me๋ก getName ๋ฉ์๋ ๋ด๋ถ์this
๋ ํธ์ถํ ๊ฐ์ฒด์ธ me๋ฅผ ๊ฐ๋ฅด์ผ this name์ 'Kim'์ด๋ค.- 2๋ฒ> ๊ฒฝ์ฐ getName
๋ฉ์๋๋ฅผ ํธ์ถ
ํ ๊ฐ์ฒด๋ Person.prototype๋ก Person.prototype๋ ๊ฐ์ฒด๋ก ์ง์ ๋ฉ์๋๋ฅผ ํธ์ถ ๊ฐ๋ฅํด getName ๋ฉ์๋ ๋ด๋ถ์this
๋ Person.prototype๋ฅผ ๊ฐ๋ฅด์ผ this name์ 'Jamie'์ด๋ค.
- 2.3>
์์ฑ์ ํจ์
๋ด๋ถ์this
์๋ ์์ฑ์ ํจ์๊ฐ (๋ฏธ๋์)์์ฑํ ์ธ์คํด์ค๊ฐ ๋ฐ์ธ๋ฉ
๋๋ค<script> // ์์ฑ์ ํจ์ function Circle(radius){ // ์์ฑ์ ํจ์ ๋ด๋ถ์ this ์์ฑ์ ํจ์๊ฐ ์์ฑํ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํด. this.radius = radius; this.getDiameter = function(){ return 2 * this.radius; } } //์ธ์คํด์ค ์์ฑ const circle1 = new Circle(5) const circle2 = new Circle(10) console.log(circle1.getDiameter()) / 10 console.log(circle2.getDiameter()) / 20 //new ์ฐ์ฐ์ ํธ์ถ X ์ผ๋ฐ ํจ์์ ํธ์ถ const circle3 = Circle(15); console.log(circle2) // ์ผ๋ฐ ํจ์๋ก ํธ์ถ๋ Circle์ ๋ฐํ๋ฌธ X => undefined ๋ฐํ console.log(radius) // ์ผ๋ฐ ํจ์๋ก ํธ์ถ๋ Circle ํจ์ ๋ด๋ถ์ this๋ ์ ์ญ๊ฐ์ฒด ๊ฐ๋ฆฌํด </script>
์์ฑ์ ํจ์
๋ ๊ฐ์ฒด(์ธ์คํด์ค)๋ฅผ ์์ฑํ๋ ํจ์๋ก ์ผ๋ฐ ํจ์์ ๋์ผํ ๋ฐฉ๋ฒ์ผ๋ก ์์ฑ์ ํจ์๋ฅผ ์ ์ํ ๋ค new ์ฐ์ฐ์์ ํจ๊ป ํธ์ถํ๋ฉด ํด๋น ํจ์๋ ์์ฑ์ ํจ์๋ก ๋์ํ๋ค.
๋จ, new ์ฐ์ฐ์์ ํจ๊ป ์์ฑ์ ํจ์ ํธ์ถํ์ง ์์ผ๋ฉด ์ผ๋ฐ ํจ์๋ก ๋์ํ๋ค๋ ์ฌ์ค!
apply/call/bind ๋ฉ์๋
๋ Function.prototype์ ๋ฉ์๋๋ก ๋ชจ๋ ํจ์๊ฐ์์
๋ฐ์ ์ฌ์ฉํ ์ ์๋ค.
- 2.4.1>
Function.prototype.apply/call ๋ฉ์๋
๋
1>this
๋ก ์ฌ์ฉํ ๊ฐ์ฒด์ 2> ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ ๋ฌ๋ฐ์ ํจ์๋ฅผ ํธ์ถํ๋ค./** <script> ์ฃผ์ด์ง this ๋ฐ์ธ๋ฉ๊ณผ ์ธ์ ๋ฆฌ์คํธ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ํธ์ถ @param thisArg - this๋ก ์ฌ์ฉํ ๊ฐ์ฒด @param argsArray - ํจ์์๊ฒ ์ ๋ฌํ ์ธ์ ๋ฆฌ์คํธ์ ๋ฐฐ์ด ๋๋ ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด @return ํธ์ถ๋ ํจ์์ ๋ฐํ๊ฐ **/ Function.prototype.apply(thisArg[, argsArray]) /** ์ฃผ์ด์ง this ๋ฐ์ธ๋ฉ๊ณผ ,๋ก ๊ตฌ๋ถ๋ ์ธ์ ๋ฆฌ์คํธ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ํธ์ถ @param thisArg - this๋ก ์ฌ์ฉํ ๊ฐ์ฒด @param arg1, arg2, ... - ํจ์์๊ฒ ์ ๋ฌํ ์ธ์ ๋ฆฌ์คํธ @return ํธ์ถ๋ ํจ์์ ๋ฐํ๊ฐ **/ Function.prototype.call(thisArg[, args1[,arg2[,...]]]) </script>
apply์ call ๋ฉ์๋
์ ๋ณธ์ง์ ์ธ ๊ธฐ๋ฅ์ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ด๋ค.
apply์ call ๋ฉ์๋
๋ ํจ์๋ฅผ ํธ์ถํ๋ฉด์ ์ฒซ ๋ฒ์ฌ ์ธ์๋ก ์ ๋ฌํ ํน์ ๊ฐ์ฒด๋ฅผ ํธ์ถํ ํจ์์ this์ ๋ฐ์ธ๋ฉํ๋ค.<script> // ์์ฑ์ ํจ์ function getThisBinding(){ return this; } // this ๋ก ์ฌ์ฉํ ๊ฐ์ฒด const thisArg = {a:1}; console.log(getThisBinding()) // window // getThisBinding ํจ์๋ฅผ ํธ์ถํ๋ฉด์ // ์ธ์๋ก ์ ๋ฌํ ๊ฐ์ฒด๋ฅผ getThisBinding ํจ์์ this์ ๋ฐ์ธ๋ฉ console.log(getThisBinding.apply(thisArg)) // {a:1}; console.log(getThisBinding.call(thisArg)) // {a:1}; </script>
apply์ call ๋ฉ์๋
๋ ํธ์ถํ ํจ์์ ์ธ์๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์๋ง ๋ค๋ฅผ ๋ฟthis
๋ก ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ฉด์ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฑด ๋์ผํ๊ฒ ๋์ํ๋ค.<script> // ์์ฑ์ ํจ์ function getThisBinding(){ console.log(arguments) return this; } // this ๋ก ์ฌ์ฉํ ๊ฐ์ฒด const thisArg = {a:1}; // 1> getThisBinding ํจ์๋ฅผ ํธ์ถํ๋ฉด์ ์ธ์๋ก ์ ๋ฌํ ๊ฐ์ฒด๋ฅผ getThisBinding ํจ์์ this์ ๋ฐ์ธ๋ฉ // 2> apply ๋ฉ์๋๋ ํธ์ถํ ํจ์์ `์ธ์๋ฅผ ๋ฐฐ์ด๋ก ๋ฌถ์ด` ์ ๋ฌ console.log(getThisBinding.apply(thisArg, [1, 2, 3])) // Arguments(3) { 0: 1, 1: 2, 2: 3, callee:f, Symbol(Symbol.iterator): f} // {a:1}; // 2> call ๋ฉ์๋๋ ํธ์ถํ ํจ์์ `์ธ์๋ฅผ ์ผํ๋ก ๊ตฌ๋ถํ ๋ฆฌ์คํธ ํ์`์ผ๋ก ์ ๋ฌ console.log(getThisBinding.call(thisArg, 1, 2, 3)) // Arguments(2) { 0: 1, 1: 2, 2: 3, callee:f, Symbol(Symbol.iterator): f} // {a:1}; </script>
apply ๋ฉ์๋
๋ ํธ์ถํ ํจ์์ ์ธ์๋ฅผ '๋ฐฐ์ด'๋ก ๋ฌถ์ด ์ ๋ฌํ๊ณcall ๋ฉ์๋
๋ ํธ์ถํ ํจ์์ ์ธ์๋ฅผ '์ผํ๋ก ๊ตฌ๋ถํ ๋ฆฌ์คํธ' ํ์์ผ๋ก ์ ๋ฌํ๋ค.apply/call ๋ฉ์๋
์ ๋ํ์ ์ฉ๋๋ arguments ๊ฐ์ฒด์ ๊ฐ์ ์ ์ฌ ๋ฐฐ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ด๋ค.
arguments ๊ฐ์ฒด๋ ๋ฐฐ์ด์ด ์๋๊ธฐ์ Array.prototype.slice๊ฐ์ ๋ฐฐ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ง๋งapply์ call ๋ฉ์๋
๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ๋ฅํ๋ค.<script> // ์์ฑ์ ํจ์ function converArgsToArr(){ console.log(arguments) // arguments ๊ฐ์ฒด๋ฅผ ๋ฐฐ์ด๋ก ๋ณํ // slice ๋ฉ์๋๋ฅผ ์ธ์ ์์ด ํธ์ถํ๋ฉด ๋ฐฐ์ด์ ๋ณต์ฌ๋ณธ ์์ฑ const arr = Array.prototype.slice.call(arguments); // const arr = Array.prototype.slice.apply(arguments); console.log(arr); return arr; } converArgsToArr(1,2,3,4); // [1, 2, 3, 4] </script>
Function.prototype.bind ๋ฉ์๋
๋ apply์ call ๋ฉ์๋์ ๋ฌ๋ฆฌ ํจ์ ํธ์ถํ์ง ์๊ณthis
๋ฅผ ์ฌ์ฉํ ๊ฐ์ฒด๋ง ์ ๋ฌํ์ฌ ํธ์ถํ๊ธฐ ์ํด์ ๋ช ์์ ์ผ๋ก ํธ์ถ์ ํด์ค์ผํ๋ค.<script> function getThisBinding(){ return this; } // this ๋ก ์ฌ์ฉํ ๊ฐ์ฒด const thisArg = {a:1}; // bind ๋ฉ์๋๋ ํจ์์ this๋ก ์ฌ์ฉํ ๊ฐ์ฒด ์ ๋ฌ. // bind ๋ฉ์๋๋ ํจ์๋ฅผ ํธ์ถX. console.log(getThisBinding.bind(thisArg)); // getThisBinding // bind ๋ฉ์๋๋ ํจ์๋ฅผ ํธ์ถX๊ธฐ์ ๋ช ์์ ์ผ๋ก ํธ์ถํด์ผํ๋ค. console.log(getThisBinding.bind(thisArg)()); // {a:1}; </script>
bind ๋ฉ์๋
๋ ๋ฉ์๋์this
์ ๋ฉ์๋ ๋ด๋ถ์ ์ค์ฒฉ ํจ์ ๋๋ ์ฝ๋ฐฑ ํจ์์this
๊ฐ ๋ถ์ผ์นํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
- person.foo์ ์ฝ๋ฐฑ ํจ์๊ฐ ํธ์ถ๋๊ธฐ ์ด์ ์ธ 1๋ฒ> ์์ ์์
this
๋ foo ๋ฉ์๋๋ฅผํธ์ถํ ๊ฐ์ฒด
,person ๊ฐ์ฒด
๋ฅผ ๊ฐ๋ฆฌํจ๋ค.- ๊ทธ๋ฌ๋ person.foo์ ์ฝ๋ฐฑ ํจ์๊ฐ
์ผ๋ฐ ํจ์๋ก์ ํธ์ถ
๋ 2๋ฒ> ์์ ์์this
๋์ ์ญ๊ฐ์ฒด window
๋ฅผ ๊ฐ๋ฆฌ์ผ person.foo ์ฝ๋ฐฑ ํจ์ ๋ด๋ถ์์ this.name์window.name
๊ณผ ๊ฐ๋ค.<script> const person = { name: 'Jamie', foo(callback) { // 1๋ฒ> setTimeout(callback, 100) } }; person.foo(function(){ // 2๋ฒ> console.log(`Hi, bro I'm ${this.name}`) }); // Hi, bro I'm . // ์ผ๋ฐ ํจ์๋ก ํธ์ถ๋ ์ฝ๋ฐฑ ํจ์ ๋ด๋ถ์ this.name์ window name // ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ window name์ ๋ธ๋ผ์ฐ์ ์ฐฝ์ ์ด๋ฆ์ ๋ํ๋ด๋ ๋นํธ์ธ ํ๋กํผํฐ๋ก ๊ธฐ๋ณธ๊ฐ '' </script>
- person.foo ์ฝ๋ฐฑํจ์๋ ์ธ๋ถ ํจ์ person.foo๋ฅผ ๋๋ ํฌํผํจ์ ์ญํ ์ ํ๊ธฐ์
this
๊ฐ ์์ดํ๋ฉด ๋ฌธ๋งฅ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ์bind ๋ฉ์๋
๋ฅผ ์ฌ์ฉํด ์ฝ๋ฐฑํจ์ ๋ด๋ถ์this
์ ์ธ๋ถ ํจ์ ๋ด๋ถ์this
๋ฅผ ์ผ์น์ํฌ์ ์๋ค.<script> const person = { name: 'Jamie', foo(callback) { // bind ๋ฉ์๋๋ก callback ํจ์ ๋ด๋ถ์ this ๋ฐ์ธ๋ฉ์ ์ ๋ฌ setTimeout(callback.bind(this), 100) } }; person.foo(function(){ console.log(`Hi, bro I'm ${this.name}`) }); // Hi, bro I'm Jamie </script>
- *
this
๋ 1> ์์ ์ด ์ํ ๊ฐ์ฒด ์์ ํน์ 2> ์์ ์ด ์์ฑํ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋์๊ธฐ ์ฐธ์กฐ ๋ณ์
๋ก ์ํฉ์ ๋ฐ๋ผ ๊ฐ๋ฆฌํค๋ ๋์์ด ๋ฌ๋ผ์ง๋ค.๐this ๋ฐ์ธ๋ฉ
์ ํจ์ ํธ์ถ ๋ฐฉ์(1. ์ผ๋ฐ ํจ์๋ก ํธ์ถ/2. ๋ฉ์๋ ํธ์ถ/3. ์์ฑ์ ํจ์ ํธ์ถ 4.call,apply,bind ๋ฉ์๋์ ์ํ ๊ฐ์ ํธ์ถ)์ ๋ฐ๋ผ ๋์ ์ผ๋ก ๊ฒฐ์ ๋๋ค.- ๐this ๋ฐ์ธ๋ฉ์
this(์๋ณ์ ์ญํ )
์this๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ
์ `์ฐ๊ฒฐํ๋ ๊ณผ์ ์ ์๋ฏธํ๋ค.
-์ผ๋ฐ ํจ์ ํธ์ถ
์ -์ ์ญ ๊ฐ์ฒด
/
๋ฉ์๋ ํธ์ถ ์
-๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด
/
์์ฑ์ ํจ์ ํธ์ถ
์ -์์ฑ์ ํจ์๊ฐ ์์ฑํ ์ธ์คํด์ค
/
call,apply,bind ๋ฉ์๋
์ ์ํ๊ฐ์ ํธ์ถ
์ -๋ฉ์๋์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌํ ๊ฐ์ฒด
=this
๊ฐ ๋๋น
- ์ฑ - ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive (376p-392p)
๋๋ถ๋ถ์ ๊ฒฝ์ฐthis
์ ๊ฐ์ ํจ์๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ์ํด ๊ฒฐ์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ์ ์ธํ ๋ ๊ฒฐ์ ๋๋ ๊ฒ, ๋ํ์ ์ผ๋ก๋ ํด๋ก์
๊ฐ ์๋ค.
๊ทธ๋ฆฌ๊ณ ํธ์ถํ ๋ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ์ํด ๊ฒฐ์ ๋๋ ๊ฒ์ ๋ํ์ ์ผ๋ก this
๊ฐ ์๋ค.
ํจ์์ this
๊ฐ์ด ํจ์๊ฐ ์ด๋ป๊ฒ ํธ์ถ๋์๋์ง์ ๋ฌด๊ดํ๊ฒ ์ค์ ํ ์ ์๋ bind
๋ฉ์๋๊ฐ ์๋ค.
์ฝ๋์ข ๋ ์ฝ๋ ์ ๋ฆฌ
const someone = { name: 'jamie', whoAmI : function(){ console.log(this) } }; // whoAmI ํจ์๋ฅผ ํธ์ถํ ๋ ์์ ๋ฐ๋ก someone someone.whoAmI(); // {name: "jamie", whoAmI: f} // this๊ฐ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. // ์ฆ ํธ์ถ์ ๋๊ฐ ํ๋๋์ ๋ฐ๋ผ์ ๋ฌ๋ผ์ง๋ค const myWhoAmI = someone.whoAmI; // myWhoAmI ํจ์๋ฅผ ํธ์ถํ ๋ ์์ ๋ฐ๋ก global, window์ด๋ค myWhoAmI(); // window
์ฝ๋๋ฅผ ์ ๋ ฅํ์ธ์
> ์ฝ๋์ข
๋ ์ฝ๋ ์ ๋ฆฌ
HTML ๋ฌธ์์ ์ ๋ชฉ์
๋๋ค.
HTML ๋ฌธ์์ ์ฝํ
์ธ (contents) ์์ญ์
๋๋ค.
```