Mari kita ambil contoh terlebih dahulu:
// Racun object.prototypeObject.prototype.bar = 1; var foo = {moo: 2}; for (var i in foo) {console.log (i); // Cetak Bar dan Moo}Kita perlu memperhatikan dua poin di sini. Salah satunya adalah bahwa for in in loop akan mengabaikan atribut yang ditetapkan untuk dihitung menjadi false. Misalnya, properti panjang array. Kedua, karena untuk dalam akan melintasi seluruh rantai prototipe, ketika rantai prototipe terlalu panjang, ia akan berdampak pada kinerja.
Hancur adalah kata yang sangat aneh. Bahkan, sulit bagi Anda untuk menemukan bayangannya di JavaScript, dan sebenarnya dipinjam dari penulis dari Ruby. Tujuan menciptakan yang dapat dihindarkan bukan untuk menggunakannya secara mandiri, tetapi untuk menggunakan metode "campuran". Banyak metode dalam penggunaan prototipe yang dihitung, sehingga dapat dikatakan sebagai landasan prototipe. Saya tidak akan memberikan pengantar terperinci di sini, silakan merujuk ke detailnya - Hancur.
Karena kita tidak dapat mengubah perilaku untuk di loop itu sendiri, kita hanya dapat mengambil metode lain untuk menyaring properti yang tidak ingin muncul di loop. Melalui "JavaScript Learning Notes Objects (III): HasownProperty", kita tahu bahwa metode HasownProperty dapat melakukan ini.
Filter menggunakan HasownProperty
Masih menggunakan contoh sebelumnya:
// keracunan objek.prototypeObject.prototype.bar = 1; var foo = {moo: 2}; untuk (var i in foo) {if (foo.hasownproperty (i)) {console.log (i); }}Ini adalah satu -satunya cara yang benar untuk menulisnya. Karena kami telah menggunakan metode HASOWNPROPERTY, kami hanya mengeluarkan Moo kali ini. Jika metode HasownProperty tidak berlaku, kesalahan akan muncul ketika objek.Prototype diperpanjang.
Sekarang banyak kerangka kerja memilih untuk memperluas metode dari objek.prototype, jadi ketika kita menggunakan kerangka kerja ini, kita akan menghadapi masalah jika kita menggunakan loop untuk di loop yang tidak disaring dengan HasownProperty.
Meringkaskan
Dianjurkan untuk mengembangkan kebiasaan baik dari properti penyaringan hasownproperty, tidak membuat asumsi tentang lingkungan yang berjalan, terlepas dari apakah objek prototipe asli diperluas.