[Front-end๐Ÿฆ] #26 JavaScript DOM

๋˜์ƒยท2021๋…„ 12์›” 3์ผ
0

front-end

๋ชฉ๋ก ๋ณด๊ธฐ
40/58
post-thumbnail

1. ๋ฉ‹์‚ฌ ์ˆ˜์—…

๋ฐฐ์šด ๋‚ด์šฉ๋“ค์„ ๋˜์งš๊ณ , ์•ž์œผ๋กœ ๋ฐฐ์šธ ๋‚ด์šฉ๋“ค์„ ๋ฐฑ์‹  ๋งž๋“ฏ์ด ๊ฐ€๋ณ๊ฒŒ ์‚ดํŽด๋ณด์•˜๋‹ค.

๊ฐ์ฒด

  • ๊ฐ์ฒด๋Š” ๋ฐ˜๋ณต์ด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— (iterable์ด ์•„๋‹˜), iterable๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์œผ๋ฉด Symbol.iterator๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๊ฐ์ฒด๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค. property์™€ method๋ฅผ ๊ฐ€์ง„๋‹ค.
  • ๋ณ€์ˆ˜ ์„ ์–ธํ•  ๋•Œ ํŒŒ์ด์ฌ์ฒ˜๋Ÿผ a=1 ํ•˜๋ฉด var๋ฅผ ์•”๋ฌต์ ์œผ๋กœ ๋ถ™์—ฌ์ค€๋‹ค.
  • String, Number type์˜ ์ธ์Šคํ„ด์Šค๋„ ๊ฒฐ๊ตญ prototype ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’์ด๋‚˜ bulit-in method๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

this

  • this๋Š” this๊ฐ€ ๋“ค์–ด์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๊ฐ์ฒด
  • ์ „์—ญ ํ•จ์ˆ˜์—์„œ this๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด this๋Š” ์ „์—ญ ๊ฐ์ฒด window window.์ „์—ญํ•จ์ˆ˜() ์ด๋ ‡๊ฒŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.
  • object์˜ method์—์„œ this๋Š” ํ•ด๋‹น ๊ฐ์ฒด ์ž์ฒด.
  • new ์ƒ์„ฑ์žํ•จ์ˆ˜() ์˜ ์ƒ์„ฑ์žํ•จ์ˆ˜์—์„œ ๊ฐ์ฒด๋Š” ์ƒ์„ฑ๋  ์ธ์Šคํ„ด์Šค.

closure(ํ์‡„)

  • scope์™€ ํ•จ๊ป˜ ์ดํ•ดํ•˜๋ฉด ์–ด๋ ต์ง€ ์•Š๋‹ค. (์ „์—ญ, ๋ธ”๋ก์Šค์ฝ”ํ”„, ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„๊ฐ€ ์กด์žฌํ•œ๋‹ค)
  • ํ•จ์ˆ˜ ์•ˆ์˜ ๊ณต๊ฐ„์ฒ˜๋Ÿผ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๊ณต๊ฐ„.
function myFunction() {
    var val1 = "hello"; // ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•จ.
    return { getVal1 : function(){return val1} } // closure ๋Š” ํ์‡„๋œ ๊ณต๊ฐ„์˜ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ํ…Œํฌ๋‹‰. ์• ์ดˆ์— ๊ทธ๋ ‡๊ฒŒ ์ ‘๊ทผ์„ ํ•œ๋‹ค๋Š”๊ฑด ํ์‡„์ ์ธ ๊ณต๊ฐ„์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ํ•˜๋Š” ๊ฑฐ๋‹ค. ์™œ? ๋ณ€์ˆ˜๊ฐ€ ์„ž์ด๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ.
}
myFunction().getVal1() // val1 ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

1์‹œ~3์‹œ ์„ธ์…˜ ๋ถˆ์ฐธ

DOM
Document Object Model

  • HTML ๋ฌธ์„œ์˜ ๋‚ด์šฉ์„ ํŠธ๋ฆฌํ˜•ํƒœ๋กœ ๊ตฌ์กฐํ™”ํ•˜์—ฌ ์›นํŽ˜์ด์ง€์™€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๋Š” ์—ญํ• 
  • ๊ฐ๊ฐ์˜ ์š”์†Œ์™€ ์†์„ฑ, ์ฝ˜ํ…์ธ ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋‹จ์œ„๋ฅผ '๋…ธ๋“œ(node)'
  • document ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ HTML ๋ฌธ์„œ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

js challenge ์—์„œ ๋ฐฐ์šด querySelector, toggle ๋“ฑ์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๋ฐฐ์› ๋‹ค.

classList ๋ฅผ ์ด์šฉํ•œ DOM control

classList ๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ‰์ด ๋ฐ”๋€Œ๋Š” ๊ฒƒ์„ ๊ตฌํ˜„ํ•ด ๋ณด์•˜๋‹ค.

const colors = ['mint', 'cornflowerblue', 'gold'];
const box = document.querySelector(".box");
const buttons = document.querySelectorAll('.buttons button');
//
function changeColor(index) {
  //์›๋ž˜๋Š” for... of ๋ฌธ์œผ๋กœ ํ•˜๋‚˜์”ฉ ์‚ญ์ œํ–ˆ๋Š”๋ฐ ์ด๊ฒŒ ํ›จ์”ฌ ๊น”๋”ํ•˜๋‹ค.
    box.classList = "box";
    box.classList.add(colors[index]);
}
// HTML element ๋ฅผ ๋ฐฐ์—ด๋กœ ๊ฐ€์ ธ์™€์„œ event listener๋ฅผ ๋ถ™์ด๋ ค๋ฉด ๋งˆ์ง€๋ง‰ ์ธ์ž๋กœ false๋ฅผ ์ค˜์•ผํ•œ๋‹ค.
// for ... in -> forEach๋กœ ๋ฐ”๊พธ์–ด์„œ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค.
// event listener์˜ ์ธ์ž์ธ ํ•จ์ˆ˜์— ๋‹ค์‹œ ์ธ์ž๋ฅผ ์ฃผ๋Š”๋ฒ•์„ ์ „์—๋Š” ๊ทธ๋ƒฅ ๊ฐ€์ ธ๋‹ค ์ผ์—ˆ๋Š”๋ฐ, ์ด์ œ๋Š” ์ดํ•ด๊ฐ€ ๋œ๋‹ค!!!
buttons.forEach((x, i) => x.addEventListener("click", (function(index) {
    return function() {
        changeColor(index);
    }
})(i), false));




profile
0๋…„์ฐจ iOS ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€