Add toString to the dictionary
Terdapat sebuah objek dictionary
, dibuat sebagai Object.create(null)
, untuk menyimpan pasangan key/value
.
Tambahkan metode dictionary.toString()
kedalamnya, yang harus mengembalikan daftar yang dibatasi dengan koma. toString
milikmu haruslah tidak tampil didalam for..in
dalam objeknya.
Ini adalah contohnya:
let dictionary = Object.create(null);
// metode yang ditambahkan dictionary.toString
// tambahkan beberapa data
dictionary.apple = "Apple";
dictionary.__proto__ = "test"; // __proto__ adalah kunci properti biasa disini
// hanya apple dan __proto__ yang berada di perulangan
for(let key in dictionary) {
alert(key); // "apple", lalu "__proto__"
}
// toString milikmu
alert(dictionary); // "apple,__proto__"
Pemanggilan metode bisa mengambil semua kunci yang terhitung menggunakan Object.keys
dan mengeluarkan daftarnya.
Untuk membuat toString
tidak bisa dihitung, kita bisa mendefinisikannya menggunakan deskriptor properti. Sintaks dari Object.create
membolehkan kita untuk menyediakan sebuah objek dengan deskriptor properti sebagai argumen kedua.
let dictionary = Object.create(null, {
toString: { // definisikan properti tostring
value() { // nilainya adalah fungsi
return Object.keys(this).join();
}
}
});
dictionary.apple = "Apple";
dictionary.__proto__ = "test";
// apple dan __proto berada didalam perulangan
for(let key in dictionary) {
alert(key); // "apple", lalu "__proto__"
}
// properti dari daftar yang dipisahkan dengan koma oleh toString
alert(dictionary); // "apple,__proto__"
Ketika kita membuat sebuah properti menggunakan deskriptor, tandanya akan menjadi false
secara bawaan. Jadi kode diatas, dictionary.toString
tidak bisa dihitung.
Lihat bab Properti flag dan Deskriptor untuk review.