Object.prototype.valueOf()
란?
Object
에서는 기본 동작으로this
를Object
형태로 변환해 반환한다.- 기본 정의를 오버라이드하여 쓰는 경우가 많다.
- 보통은 자바스크립트에서 오브젝트를
primitive value
로 변환하기 위해 사용하는 메서드이다. - 직접 호출하는 경우는 드물고 보통은 자동으로 호출된다.
const o = {};
const str = "test string";
console.log(Object.prototype.valueOf.call(o)); // {}
console.log(Object.prototype.valueOf.call(str)); // String {'test string'}
console.log(new Object(str)); // String {'test string'}
o
는 원래 오브젝트여서 그대로 반환된다.str
은new Object()
를 통해 형변환한 것과 똑같이 반환된다.
클래스에서의 용례
class Box {
#value;
constructor(value) {
this.#value = value;
}
valueOf() {
return this.#value;
}
}
const parcelBox = new Box("Parcel Box");
console.log("" + parcelBox); // Parcel Box
- 어떤 클래스를 단순히 값으로 표현하고 싶을 때, 오버라이드하면 유용하다.
- 자동으로 변환된다.
- 그러나 우선순위가
[Symbol.toPrimitive]
접근자 메서드에 밀린다.
class Box {
#value;
constructor(value) {
this.#value = value;
}
valueOf() {
return this.#value;
}
[Symbol.toPrimitive](hint) {
return "toPrimitive";
}
}
const parcelBox = new Box("Parcel Box");
console.log("" + parcelBox); // toPrimitive
반응형
'자바스크립트 > 개념' 카테고리의 다른 글
자바스크립트 Object.assign() 메서드란? (0) | 2023.01.01 |
---|---|
자바스크립트 오브젝트 프로퍼티의 순서 (0) | 2023.01.01 |
자바스크립트의 Symbol.toPrimitive 란? (0) | 2023.01.01 |
데이터 프로퍼티 (data property)와 접근자 프로퍼티 (accessor property) 란? (0) | 2023.01.01 |
자바스크립트의 Descriptor 란? (feat. Object.defineProperty()) (0) | 2023.01.01 |