https://mygumi.tistory.com/330
위 글을 읽고 공부하여 작성한 글입니다. 자세한 내용은 위 자료를 참고해주세요.
function Dog(name, breed, color, sex) {
this.name = name;
this.breed = breed;
this.color = color;
this.sex = sex;
}
console.log(theDog.toString()); // returns [object Object]
만약에 toString을 오버라이드 한다면, 다음과 같을 것이다.
function Dog(name, breed, color, sex) {
this.name = name;
this.breed = breed;
this.color = color;
this.sex = sex;
}
theDog = new Dog("Gabby", "Lab", "chocolate", "female");
Dog.prototype.toString = function dogToString() {
var ret =
"Dog " +
this.name +
" is a " +
this.sex +
" " +
this.color +
" " +
this.breed;
return ret;
};
console.log(theDog.toString()); //Dog Gabby is a female chocolate Lab
그리고 공부하면서 또 깨닫게 된 것은 console.log 로 다음과 같이 문자열의 덧셈을 하게되면 theDog 라는 객체가 toString() 메소드가 사용된다. 따라서 오버라이딩한 값을 return 하게 되었다.
console.log("ㅇㅇ" + theDog); //ㅇㅇDog Gabby is a female chocolate Lab
만약 프로토타입을 사용하지 않고 함수 내부에서 toString을 오버라이딩 하고 싶다면 다음과 같다.
function Dog(name, breed, color, sex) {
this.name = name;
this.breed = breed;
this.color = color;
this.sex = sex;
this.toString = () => {
let ret =
"Dog " +
this.name +
" is a " +
this.sex +
" " +
this.color +
" " +
this.breed;
return ret;
};
}
console.log(theDog.toString()); //The author name is LeeJungHyun
요약
hasOwnProperty는 객체에 해당 프로퍼티가 있는 지 확인한다.
이때 hasOwnProperty는 프로토타입 체인값은 확인 하지 않는다.
별개로 객체를 for in 순회 할 경우 이때는 프로토타입 체인값도 확인을 하기때문에 예상치 못한 오류가 발생할 수 있다.
'공부기록 > 자바스크립트 코딩테스트' 카테고리의 다른 글
[백준/JS] 2661 좋은 수열 (4) | 2023.03.24 |
---|---|
throw new Error 를 try-catch로 잡아주기 (0) | 2022.07.19 |
자바스크립트의 인스턴스(Instance)란? (0) | 2022.07.08 |
[코테강의/JS] 동전교환 (0) | 2022.07.07 |
[코테강의/JS] 중복순열 (0) | 2022.07.07 |