Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Menambah Kaedah Pembantu pada Prototaip Tatasusunan dan Objek Tanpa Menjejaskan Gelung `untuk...dalam`?

Bagaimanakah Saya Boleh Menambah Kaedah Pembantu pada Prototaip Tatasusunan dan Objek Tanpa Menjejaskan Gelung `untuk...dalam`?

Barbara Streisand
Barbara Streisandasal
2024-12-18 04:57:101001semak imbas

How Can I Add Helper Methods to Array and Object Prototypes Without Affecting `for...in` Loops?

Mentakrifkan Kaedah Tidak Boleh Dihitung dalam Tatasusunan dan Prototaip Objek

Dalam JavaScript, memanjangkan Array.prototype dan Object.prototype dengan kaedah pembantu boleh meningkatkan fungsi kod. Walau bagaimanapun, kaedah ini mungkin muncul sebagai sifat apabila melelaran ke atas objek menggunakan gelung untuk dalam, menyebabkan potensi isu.

Untuk mengelakkan ini, pertimbangkan untuk mengelak daripada gelung dalam dengan tatasusunan. Sebagai alternatif, gunakan hasOwnProperty untuk menapis sifat yang diwarisi daripada prototaip:

for (var prop in anyObj) {
    if (Object.prototype.hasOwnProperty.call(anyObj, prop)) {
        // Do something
    }
}

Walau bagaimanapun, pendekatan ini mungkin tidak sesuai untuk fungsi generik yang mengendalikan objek dengan prototaip yang tidak diketahui.

Penyelesaian yang lebih moden adalah untuk mentakrifkan sifat tidak terhitung menggunakan defineProperty:

Object.defineProperty(Array.prototype, "find", {
    enumerable: false,
    writable: true,
    value: function(testFun) {
        // Code to find element in array
    }
});

Ini memastikan kaedah cari tidak disertakan dalam untuk dalam gelung, mengekalkan kejelasan kod dan mencegah kemungkinan konflik.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menambah Kaedah Pembantu pada Prototaip Tatasusunan dan Objek Tanpa Menjejaskan Gelung `untuk...dalam`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn