D+22
- Java Script ์ฌํ ๊ฐ๋ 'this' -
(this, 'this'๋ฅผ ๋ฐ์ธ๋ฉํ๋ 5๊ฐ์ง ํจํด)
this
•๋ชจ๋ ํจ์ scope ๋ด์์ ์๋์ผ๋ก ์ค์ ๋๋ ํน์ํ ์๋ณ์
•execution context(์คํ ์ฝํ ์คํธ)์ ๊ตฌ์ฑ ์์ ์ค ํ๋๋ก, ํจ์๊ฐ ์คํ๋๋ ๋์ ์ด์ฉ ๊ฐ๋ฅ
'this'๋ฅผ ๋ฐ์ธ๋ฉํ๋ 5๊ฐ์ง ํจํด
• Global : window
• Function ํธ์ถ : window
• Method ํธ์ถ : ๋ถ๋ชจ object
• Construction mode
• .call or .apply ํธ์ถ
Global & Function ํธ์ถ
var name = 'Global Variable';
console.log(this.name); // "Global Variable"
function foo() {
console.log(this.name); // "Global Variable"
}
foo();
์ฌ๊ธฐ ํจ์ foo๊ฐ ์๊ณ , ์ ์ญ๋ณ์๋ก name์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฌ๊ธฐ์ foo๋ฅผ ์คํํ๋ฉด์ ์ฝ์ ๋ก๊ทธ๋ก this.name์ ์คํํ์ ๋์
์ ์ญ์์ this.name์ ์ฐ์ ๊ฐ์ด ๊ฐ์ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์๋ํ๋ฉด name์ ์ ์ญ์์ญ์ธ window์ ๋ฌถ์ฌ์๋ ๊ฐ์ด๋ค.
๋๋ฌธ์ name์ window.name๊ณผ ๊ฐ๋ค๊ณ ํ ์ ์๋ค.
๊ทธ๋ ๊ฒ ๋ฐ์ง๊ฒ ๋ ๊ฒฝ์ฐ ์ ์ญ์์ญ์ ์๋ this๋ window๋ผ๊ณ ํ ์ ์๊ธฐ ๋๋ฌธ์ ํด๋น ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ฉฐ,
๋ง์ฐฌ๊ฐ์ง๋ก ํจ์ foo์์ ์๋ this๋ window๋ฅผ ๋ํ๋ด๋ฏ๋ก ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค๊ณ ๋ณผ ์ ์๋ค.
var name = 'Global Variable';
function outer() {
function inner() {
console.log(this.name); // "Global Variable"
}
inner();
}
outer();
์ด์ ๊ฐ์ ๊ฒฝ์ฐ์๋ this๋ window๋ฅผ ๊ฐ๋ฆฌ์ผ "Global Variable"๋ฅผ ์ฐ์ด๋ด๋ ๊ฒ์ ์ ์ ์๋ค.
์ฆ this๋ ์ค์ฝํ๊ฐ ์ฌ๋ฌ ๊ฐ ๋ฌถ์ฌ์๋ค๊ณ ํด์ outer๋ inner๊ฐ ๋๋ ๊ฒ์ด ์๋๋ผ window์ธ this๊ฐ ๋๋ ๊ฒ์ด๋ค.
Method ํธ์ถ : ๋ถ๋ชจ object
์์ ๊ฐ์ ๊ฒฝ์ฐ์ ๋ค๋ฅธ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ ๋ฐ๋ก ๋ฉ์๋ ํธ์ถ์ด๋ค.
๋ถ๋ชจ ์์ด ๋ฐ๋ก ํจ์๋ฅผ ์คํํ๋ ๊ฒ์ด ํจ์ ํธ์ถ์ด๋ผ ํ๋ค๋ฉด,
๋ฉ์๋ ํธ์ถ์ ๊ฐ์ฒด์ ๋ด๊ธด ํจ์, ์ฆ ๋ถ๋ชจ๊ฐ ์๋ ๊ฒ์ด๋ผ๊ณ ๋ณด๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
์ด๋, ๋ถ๋ชจ๊ฐ ์๋ ๋ ์์์ ๋ฉ์๋๋ก ํธ์ถํ ๊ฒฝ์ฐ, this๋ ๋ถ๋ชจ ์ค๋ธ์ ํธ๊ฐ ๋๋ค.
(๋จ, ์ง๊ณ๋ถ๋ชจ๋ง ๋์ง์ด๋ธ๋ค)
var obj = {
fn: function(a, b) {
return this;
}
};
var obj2 = {
method: obj.fn
};
console.log(obj2.method() === obj2); //true
console.log(obj.fn() === obj); //true
์์ ์์์ this๋ ์คํ์ปจํ ์คํธ์ด๊ธฐ ๋๋ฌธ์ ์คํ๋๋ ์์ ์ด ๊ต์ฅํ ์ค์ํ ๋ ์์ด๋ฏ๋ก,
์คํ๋๋ ์์ ์ ๋ถ๋ชจ๋ฅผ ํ์ธํ๋ฉด true๊ฐ์ด ๋์ค๋ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๋ค.
Construction mode
new ์ฐ์ฐ์๋ก ์์ฑ๋ ํจ์ ์์ญ์ this๋ฅผ ๋ํ๋ด๋ฉฐ ์ด๋์ this๋ constructor(์์ฑ์)๋ฅผ ๋ํ๋ธ๋ค.
.call or .apply ํธ์ถ
๋ช ์์ ์ผ๋ก ๋๊ฒจ์ค๋ ์ฌ์ฉํ๋ค๊ณ ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ ์ ์์ผ๋ฉฐ,
.apply๋ ๋ฐฐ์ด๋ก ๊ฐ์ ๋๊ฒจ์ฃผ๊ณ , .call์ ๊ทธ๋ฅ ๋จ์ํ ๊ฐ์ ์ ๋ ฅํ๋ฉด ๋๊ฒจ์ค๋ค๋ ์ฐจ์ด๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์์ฝ
'์๋ > Code-States' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[D+24 - 27] ์ถ์์ฐํด...ใ (0) | 2020.09.30 |
---|---|
[D+23] ๋น๋๊ธฐ ํธ์ถ๊ณผ ํ์ด๋จธ API (0) | 2020.09.29 |
[D+21] ์ ์งธ ์ฃผ ํ๊ธฐ (0) | 2020.09.27 |
[D+20] ๊ณ ์ฐจํจ์ ์ดํดํ๊ธฐ (with. ํ์ด) (0) | 2020.09.26 |
[D+19] ๊ณ ์ฐจํจ์ (0) | 2020.09.25 |
๋๊ธ