Apabila melanjutkan Array atau Object prototaip dengan kaedah pembantu seperti find() atau penapis (), adalah penting untuk memastikan kaedah ini tidak muncul dalam gelung. Ini menghalang potensi isu dan kebimbangan keserasian.
Dalam JavaScript, untuk dalam gelung berulang pada sifat objek. Jika anda mentakrifkan kaedah tersuai pada Array.prototype atau Object.prototype, kaedah ini akan muncul sebagai sifat dalam gelung untuk-dalam:
Array.prototype.find = function(testFun) { // ... }; const arr = [1, 2, 3]; for (let prop in arr) { console.log(prop); // Outputs: 1, 2, 3, find }
Penyelesaian yang paling mudah ialah mengelak daripada menggunakan gelung untuk-dalam dengan tatasusunan. Sebaliknya, gunakan kaedah tradisional untuk gelung atau Array.prototype seperti forEach():
Array.prototype.find = function(testFun) { // ... }; const arr = [1, 2, 3]; for (let i = 0; i < arr.length; i++) { // Do something with arr[i] }
Untuk mengendalikan gelung untuk-masuk usang yang tidak semak kewujudan kaedah, anda boleh menambah semakan pengawal pada definisi kaedah anda:
Object.prototype.hasOwnProperty = function() { // ... }; Array.prototype.find = function(testFun) { if (this.hasOwnProperty('find')) { // Method already exists, do something } else { // Add the method } };
ES5.1 memperkenalkan Object.defineProperty, yang membolehkan anda mentakrifkan sifat tidak boleh dikira pada objek. Ini menghalang sifat daripada muncul dalam untuk dalam gelung:
Object.defineProperty(Array.prototype, "find", { enumerable: false, // ...
Menggunakan teknik di atas, anda boleh mencipta kaedah tersuai pada Array.prototype dan Object.prototype yang tidak akan mengganggu dengan gelung for-in. Ini memastikan keserasian dan menghalang kemungkinan isu untuk kod lain yang bergantung pada gelagat yang diharapkan.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Kaedah Prototaip Tatasusunan dan Objek daripada Muncul dalam Gelung `untuk...dalam`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!