> 웹 프론트엔드 > JS 튜토리얼 > 'for...in' 루프에 영향을 주지 않고 배열과 객체에 프로토타입 메서드를 어떻게 추가할 수 있나요?

'for...in' 루프에 영향을 주지 않고 배열과 객체에 프로토타입 메서드를 어떻게 추가할 수 있나요?

Barbara Streisand
풀어 주다: 2024-12-10 09:25:09
원래의
997명이 탐색했습니다.

How Can I Add Prototype Methods to Arrays and Objects Without Affecting `for...in` Loops?

반복자를 방해하지 않고 프로토타입 메소드에 액세스

도우미 메소드를 사용하여 Array.prototype 및 Object.prototype을 확장하는 것이 일반적이지만 이러한 메소드가 자주 나타납니다. for-in 루프 중에 잠재적으로 문제가 발생할 수 있습니다. 이를 방지하기 위해 개발자는 메소드를 열거 불가능으로 설정하여 이러한 루프에 메소드가 표시되는 것을 방지할 수 있습니다.

해결책: 열거 불가능 속성

EcmaScript 5.1에서는 열거할 수 없는 속성을 정의하는 데 사용할 수 있는 Object.defineProperty() 메서드. 이 메서드를 사용하면 개발자는 메서드의 열거 가능 속성을 false로 설정하여 for-in 루프에 표시되지 않게 할 수 있습니다.

다음 예에서는 메서드에서 "find"라는 비열거형 메서드를 정의하는 방법을 보여줍니다. Array.prototype:

Object.defineProperty(Array.prototype, "find", {
    enumerable: false,
    writable: true,
    value: function(testFun) {
        // Code to find element in the array
    }
});
로그인 후 복사

이 정의를 사용하면 find 메소드를 의도한 대로 사용할 수 있지만 for-in 루프에는 표시되지 않습니다. 루프는 실제 배열 값에 대해서만 반복됩니다.

참고: 이 솔루션은 EcmaScript 5.1을 지원하지 않는 이전 브라우저에서는 지원되지 않습니다. 이러한 브라우저의 경우 개발자는 es5-shim과 같은 shim 라이브러리를 사용하여 호환성을 제공할 수 있습니다. 또한 최신 브라우저에서 사용할 수 있는 forEach() 메서드는 프로토타입 메서드를 만나지 않고 배열을 반복하기 위해 for-in 루프 대신 사용할 수 있습니다.

위 내용은 'for...in' 루프에 영향을 주지 않고 배열과 객체에 프로토타입 메서드를 어떻게 추가할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿