kembali ke pelajaran

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.