[React] Do not access Object.prototype method 'hasOwnProperty' from target object. 에러 해결 방법
글 작성자: 망고좋아
반응형
🎯 Do not access Object.prototype method 'hasOwnProperty' from target object. 에러 해결 방법
- hasOwnProperty를 사용하려고 했는데 eslint 오류가 발생했다.
📝 해결 방법 (Object.prototype.hasOwnProperty.call)
// error
var hasBarProperty = foo.hasOwnProperty("bar");
var isPrototypeOfBar = foo.isPrototypeOf(bar);
var barIsEnumerable = foo.propertyIsEnumerable("bar");
// correct
var hasBarProperty = Object.prototype.hasOwnProperty.call(foo, "bar");
var isPrototypeOfBar = Object.prototype.isPrototypeOf.call(foo, bar);
var barIsEnumerable = {}.propertyIsEnumerable.call(foo, "bar");
// 나의 사용 예
// error
languageCountObj.prototype.hasOwnProperty(it.language)
// correct
Object.prototype.hasOwnProperty.call(languageCountObj, it.language)
- Object.prototype의 builtin 메서드(
hasOwnProperty
,isPrototypeOf
)를 호출하는 방법으로는- 객체에서 직접 호출
- Object.prototype을 이용하여 호출이 있다.
- Object.prototype의 builtin으로 제공되는 메서드를 객체에서 직접 호출하지 않도록 하는 규칙이다.
- Object.create(null)
- Object.create 메서드에 null을 인자로 주어 객체를 생성하게 되면 Object.prototype을 상속받지 않게 된다.
const obj = Object.create(null); obj.name = 'simyeong'; obj.hasOwnProperty; // undefined obj.hasOwnProperty('name'); // Uncaught TypeError Object.prototype.hasOwnProperty.call(obj, 'name'); // true
- 속성이 builtin 메서드의 이름과 같은 경우
- 객체에 builtin으로 제공되는 메서드와 같은 이름의 키를 객체가 가지고 있다면 예상한 대로 동작하지 않을 수 있다.
const badObj = { hasOwnProperty: '1', name: 'hong' } badObj.hasOwnProperty('name'); // Uncaught TypeError Object.prototype.hasOwnProperty.call(badObj, 'name'); // true
- Object.create(null)
📝 해결 코드
const getUsersReposLanguage = async () => {
const res = await api.getReposLanguage();
const languageCountObj = {};
if (res.success) {
const reposLanguageArray = res.data;
reposLanguageArray.forEach((it) => {
if (
Object.prototype.hasOwnProperty.call(languageCountObj, it.language)
) {
languageCountObj[it.language] += 1;
} else {
languageCountObj[it.language] = 1;
}
});
const languageCountArray = [];
const language = Object.keys(languageCountObj);
const values = Object.values(languageCountObj);
for (let i = 0; i < language.length; i += 1) {
languageCountArray.push({
name: language[i],
value: values[i],
});
}
languageCountArray.sort((a, b) => b.count - a.count);
console.log(languageCountArray);
}
};
📌 참고
반응형
'프로그래밍 > React' 카테고리의 다른 글
[React] 리액트 React.lazy와 Suspense란? (0) | 2022.02.15 |
---|---|
[React] 리액트 PropTypes 사용하기 (0) | 2022.02.15 |
[React] 리액트 차트 라이브러리 :: Recharts 사용법 (0) | 2022.02.10 |
[React] 리액트 조건부 렌더링 방법 (0) | 2022.02.10 |
[styled-components] 초기 CSS 세팅하기(GlobalStyles, styled-reset, ThemeProvider) (0) | 2022.02.08 |
댓글
이 글 공유하기
다른 글
-
[React] 리액트 React.lazy와 Suspense란?
[React] 리액트 React.lazy와 Suspense란?
2022.02.15 -
[React] 리액트 PropTypes 사용하기
[React] 리액트 PropTypes 사용하기
2022.02.15 -
[React] 리액트 차트 라이브러리 :: Recharts 사용법
[React] 리액트 차트 라이브러리 :: Recharts 사용법
2022.02.10 -
[React] 리액트 조건부 렌더링 방법
[React] 리액트 조건부 렌더링 방법
2022.02.10