JavaScript 관찰자는 개발자가 개체, 이벤트 또는 데이터 스트림의 변경 사항에 반응할 수 있도록 하여 동적 애플리케이션을 만드는 데 중요합니다. 이 가이드에서는 자세한 설명과 실제 예제를 통해 다양한 JavaScript 관찰자 유형을 살펴봅니다.
이벤트 리스너는 사용자 상호 작용(클릭, 키 누르기, 마우스 이동)과 같은 이벤트에 반응하는 기본적인 JavaScript 관찰자입니다.
<code class="language-javascript">// Select a button const button = document.querySelector('button'); // Add a click listener button.addEventListener('click', (event) => { console.log('Button clicked!', event); }); // Add a mouseover listener button.addEventListener('mouseover', () => { console.log('Mouse over button!'); });</code>
변이 관찰자는 동적으로 업데이트되는 콘텐츠에 필수적인 DOM 수정(노드 추가, 제거 또는 변경)을 추적합니다.
<code class="language-javascript">// Target node const targetNode = document.querySelector('#target'); // Create a MutationObserver const observer = new MutationObserver((mutationsList) => { mutationsList.forEach((mutation) => { console.log('DOM change detected:', mutation); }); }); // Configuration const config = { childList: true, attributes: true, subtree: true }; // Start observing observer.observe(targetNode, config); // Simulate a change setTimeout(() => { const newElement = document.createElement('p'); newElement.textContent = 'New text!'; targetNode.appendChild(newElement); }, 2000);</code>
교차 관찰자는 요소가 뷰포트에 들어가거나 나올 때를 감지하여 지연 로딩이나 애니메이션에 이상적입니다.
<code class="language-javascript">// Element to observe const targetElement = document.querySelector('#box'); // Create an IntersectionObserver const observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { console.log('Element in viewport:', entry.target); } else { console.log('Element out of viewport:', entry.target); } }); }); // Start observing observer.observe(targetElement);</code>
크기 조정 관찰자는 반응형 UI에 중요한 요소 크기 변경을 모니터링합니다.
<code class="language-javascript">// Element to observe const box = document.querySelector('#resizable'); // Create a ResizeObserver const observer = new ResizeObserver((entries) => { entries.forEach((entry) => { const { width, height } = entry.contentRect; console.log(`New size: ${width}px x ${height}px`); }); }); // Start observing observer.observe(box); // Simulate a resize setTimeout(() => { box.style.width = '400px'; box.style.height = '200px'; }, 2000);</code>
프록시 API를 사용하면 객체 속성 변경을 관찰하여 업데이트에 대한 동적 반응을 활성화할 수 있습니다.
<code class="language-javascript">// Object to observe const obj = { name: 'John', age: 30 }; // Use Proxy const observedObj = new Proxy(obj, { set(target, property, value) { console.log(`Property '${property}' changed from '${target[property]}' to '${value}'`); target[property] = value; return true; }, }); // Trigger changes observedObj.name = 'Jane'; observedObj.age = 31;</code>
RxJS는 효율적인 데이터 스트림 관리를 위한 고급 관찰자 패턴 구현을 제공합니다.
<code class="language-javascript">// Select a button const button = document.querySelector('button'); // Add a click listener button.addEventListener('click', (event) => { console.log('Button clicked!', event); }); // Add a mouseover listener button.addEventListener('mouseover', () => { console.log('Mouse over button!'); });</code>
성능 관찰자는 애플리케이션 최적화를 위해 성능 이벤트(리소스 로딩, 장기 작업)를 추적합니다.
<code class="language-javascript">// Target node const targetNode = document.querySelector('#target'); // Create a MutationObserver const observer = new MutationObserver((mutationsList) => { mutationsList.forEach((mutation) => { console.log('DOM change detected:', mutation); }); }); // Configuration const config = { childList: true, attributes: true, subtree: true }; // Start observing observer.observe(targetNode, config); // Simulate a change setTimeout(() => { const newElement = document.createElement('p'); newElement.textContent = 'New text!'; targetNode.appendChild(newElement); }, 2000);</code>
내장 API 이상의 시나리오를 위한 관찰자 디자인 패턴을 사용하여 맞춤형 관찰자를 만듭니다.
<code class="language-javascript">// Element to observe const targetElement = document.querySelector('#box'); // Create an IntersectionObserver const observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { console.log('Element in viewport:', entry.target); } else { console.log('Element out of viewport:', entry.target); } }); }); // Start observing observer.observe(targetElement);</code>
JavaScript 관찰자는 동적 및 반응형 애플리케이션을 구축하기 위한 강력한 도구입니다. 이러한 다양한 유형을 마스터하면 JavaScript 개발 능력이 크게 향상됩니다. 이러한 예를 실험하여 이해를 심화하고 이를 프로젝트에 통합하세요.
위 내용은 JavaScript의 관찰자 이해: 종합 안내서의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!