Rumah > hujung hadapan web > tutorial js > Bagaimana untuk Mengelakkan Kaedah Prototaip Tatasusunan dan Objek daripada Muncul dalam Gelung `untuk...dalam`?

Bagaimana untuk Mengelakkan Kaedah Prototaip Tatasusunan dan Objek daripada Muncul dalam Gelung `untuk...dalam`?

Barbara Streisand
Lepaskan: 2024-12-10 14:37:10
asal
923 orang telah melayarinya

How to Prevent Custom Array and Object Prototype Methods from Appearing in `for...in` Loops?

Mentakrifkan Kaedah pada Array.prototype dan Object.prototype yang Tidak Muncul dalam Gelung

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.

Masalahnya: Kaedah Dipaparkan dalam untuk dalam Gelung

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
}
Salin selepas log masuk

Penyelesaian 1: Elakkan Gelung untuk-dalam dengan Tatasusunan

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]
}
Salin selepas log masuk

Penyelesaian 2: Semak Sintaks Kaedah Usang

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
  }
};
Salin selepas log masuk

Penyelesaian 3: Gunakan Object.defineProperty

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,
  // ...
Salin selepas log masuk

Kesimpulan

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan