프로그래밍 언어/HTML,CSS,JS

JavaScript 개체의 속성을 얻는 방법

Rateye 2021. 12. 4. 12:36
728x90
반응형
질문 : JavaScript 개체의 속성을 어떻게 열거합니까?

JavaScript 개체의 속성을 어떻게 열거합니까?

실제로 정의 된 모든 변수와 해당 값을 나열하고 싶지만 변수를 정의하면 실제로 창 개체의 속성이 생성된다는 것을 배웠습니다.

답변

충분히 간단합니다.

for(var propertyName in myObject) {
   // propertyName is what you want
   // you can get the value like this: myObject[propertyName]
}

이제는 사용할 수 없기 때문에 이러한 방식으로 개인 변수를 얻을 수 없습니다.

편집 : @bitwiseplatypus hasOwnProperty() 메서드를 사용하지 않으면 상속 된 속성을 얻게된다는 것이 맞습니다. 그러나 객체 지향 프로그래밍에 익숙한 사람이 왜 덜 기대할 수 있는지 모르겠습니다! 일반적으로이 문제를 제기하는 사람은 이에 대해 Douglas Crockford의 경고를 받았으며, 이는 여전히 저를 혼란스럽게합니다. 다시 말하지만 상속은 OO 언어의 일반적인 부분이므로 프로토 타입 임에도 불구하고 JavaScript의 일부입니다.

즉, hasOwnProperty() 필터링에 유용하지만 상속 된 속성을 가져 오는 데 위험한 것이있는 것처럼 경고를 울릴 필요가 없습니다.

편집 2 : @bitwiseplatypus 는 원래 객체를 작성한 시점보다 늦게 (프로토 타입을 통해) 누군가가 객체에 속성 / 메소드를 추가 할 경우 발생할 수있는 상황을 나타냅니다. 그러나 이것이 예기치 않은 동작을 일으킬 수 있다는 것은 사실입니다. , 나는 개인적으로 그것을 완전히 내 문제로 보지 않습니다. 단지 의견의 문제입니다. 게다가 객체를 구성하는 동안 프로토 타입을 사용하면서 객체의 속성을 반복하는 코드가 있고 상속 된 모든 속성을 원하는 방식으로 디자인하면 어떻게 될까요? hasOwnProperty() 사용하지 않을 것입니다. 그런 다음 누군가 나중에 새 속성을 추가한다고 가정 해 보겠습니다. 그 시점에서 상황이 나빠지면 그게 내 잘못입니까? 나는 그렇게 생각하지 않는다. jQuery.extendjQuery.fn.extend 를 통해) 작동 방식을 확장하는 방법을 지정한 이유라고 생각합니다.

출처 : https://stackoverflow.com/questions/85992/how-do-i-enumerate-the-properties-of-a-javascript-object
728x90
반응형