사전에 toString 추가하기
중요도: 5
key/value
쌍을 저장하기 위해 Object.create(null)
로 생성된 dictionary
객체가 있습니다.
그 안에 쉼표로 구분된 키 목록을 반환하는 dictionary.toString()
메서드를 추가하십시오. toString
은 객체 위의 for..in
에 나타나서는 안 됩니다.
작동 방식은 다음과 같습니다.
let dictionary = Object.create(null);
// dictionary.toString 메서드를 추가하는 코드
// 데이터를 추가합니다.
dictionary.apple = "Apple";
dictionary.__proto__ = "test"; // __proto__는 여기서 일반적인 프로퍼티 키입니다.
// 반복문에는 apple과 __proto__ 만 있습니다.
for(let key in dictionary) {
alert(key); // "apple" 다음 "__proto__"입니다.
}
// toString이 동작하는 부분입니다.
alert(dictionary); // "apple,__proto__"
이 메서드는 Object.keys
를 사용하여 열거 가능한 모든 키를 가져와서 목록으로 출력할 수 있습니다.
toString
을 열거할 수 없도록 하기 위해 프로퍼티 설명자를 사용하여 toString
을 정의하겠습니다. Object.create
문법을 사용하면 프로퍼티 설명자를 두 번째 인수로 사용하여 객체를 제공할 수 있습니다.
let dictionary = Object.create(null, {
toString: { // toString 프로퍼티를 정의합니다.
value() { // value는 함수입니다.
return Object.keys(this).join();
}
}
});
dictionary.apple = "Apple";
dictionary.__proto__ = "test";
// apple과 __proto__는 반복문 안에 있습니다.
for(let key in dictionary) {
alert(key); // "apple" 다음 "__proto__"가 있습니다.
}
// toString에 의해 쉼표로 구분된 프로퍼티 목록
alert(dictionary); // "apple,__proto__"
설명자를 사용하여 프로퍼티를 만들면 기본적으로 플래그가 false
입니다. 따라서 위 코드에서 dictionary.toString
은 열거할 수 없습니다.
다음 챕터 프로퍼티 플래그와 설명자를 참고하시기 바랍니다.