ํด๋ฆฌํ
ํด๋ฆฌํ(Polyfill)์ด๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ํ์ง ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ง์ ๊ฐ๋ฅํ๋๋ก ๋ณํํ ์ฝ๋๋ฅผ ๋ปํ๋ค. ํ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ฌ์ฉํด ์๋ฐ์คํฌ๋ฆฝํธ์ ์ต์ ๊ธฐ๋ฅ์ ๋๊ฐ์ด ๊ตฌํํ๋ ๋ฐฉ์์ด๋ค.
Babel๊ณผ core-js
ํด๋ฆฌํ์ ์ํ ํธ๋์คํ์ผ๋ฌ์๋ Babel์ด ์๋ค. Babel ๋ด๋ถ์๋ core-js๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ฌ๋์ด ES6 ์ดํ์ ๋ฌธ๋ฒ๋ค์ ํด๋ฆฌํ ์ฒ๋ฆฌํ ์ ์๋ค.
ํด๋ฆฌํ ๋ฐ๋ผํด๋ณด๊ธฐ
ES6์์ ์ถ๊ฐ๋ ๋ฐฐ์ด์ ๋ด์ฅ ๋ฉ์๋ map()
์ ES5๋ก ๊ตฌํํด๋ณด์. mockMap()
์ map()
๊ณผ ๊ฐ์ด ๋ฐฐ์ด ๋ด์ ๋ชจ๋ ์์์ ๋ํด ์ฃผ์ด์ง ์ฝ๋ฐฑํจ์๋ฅผ ํธ์ถํ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์ ์๋ก์ด ๋ฐฐ์ด์ ๋ฐํํ๋ ๋ฉ์๋์ด๋ค.
const nums = [1, 4, 9, 16];
const result = nums.mockMap((n) => n * 2);
console.log(result); // [2, 8, 18, 32]
๊ทธ ์ ์ Array.prototype
์ mockMap()
์ด๋ผ๋ ๋ฉ์๋๋ฅผ ์ฃผ์
ํด์ผ ๋ชจ๋ ๋ฐฐ์ด์ด ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๊ฒ ๋๋ค.
Array.prototype.mockMap = function (callback) {
const arr = [];
for (let i = 0; i < this.length; i++) {
arr.push(callback(this[i], i, this));
}
return arr;
};
mockMap()
๋ด๋ถ์์๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ฐฐ์ด(this
)์ ์ํํ๋ฉด์ callback
ํจ์์ ํ๋ผ๋ฏธํฐ๋ก this[i]
๋ฅผ ๋๊ฒจ์ฃผ๊ณ ์๋ค. ์ฌ๊ธฐ์๋ (n) => n * 2
๊ฐ ์ฝ๋ฐฑํจ์์ ํด๋น๋๋ค. ๋ฐ๋ผ์ ๋ฐฐ์ด์ ๊ฐ ์์(this[i]
)๋ค์ 2๊ฐ ๊ณฑํด์ง ๊ฐ์ด ๋ฆฌํด๋ ์ ์๋ ๊ฒ์ด๋ค.
์ถ๊ฐ์ ์ผ๋ก this[i]
์ ์ด์ด callback
ํจ์์ ํ๋ผ๋ฏธํฐ๋ก ํ์ฌ ์ธ๋ฑ์ค(i
)์ mockMap()
์ ํธ์ถํ ๋ฐฐ์ด(this
)์ ์ ๋ฌํ๊ณ ์๋ค. ์ด ๋ ๊ฐ์ ์ธ์๋ (n, i, arr) => n * 2
์ ๊ฐ์ ์์ผ๋ก ๋ฐ์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ํ์๊ฐ ์๋ ์ต์
์ธ์์ด๋ค.