Rumah >hujung hadapan web >tutorial js >Mengapa memberikan kaedah prototaip di dalam fungsi pembina secara amnya dianggap sebagai amalan buruk dalam JavaScript?

Mengapa memberikan kaedah prototaip di dalam fungsi pembina secara amnya dianggap sebagai amalan buruk dalam JavaScript?

Barbara Streisand
Barbara Streisandasal
2024-10-30 21:02:02397semak imbas

Why is assigning prototype methods inside the constructor function generally considered a bad practice in JavaScript?

Menetapkan Kaedah Prototaip Di Dalam Pembina: Potensi Kelemahan dan Isu Skop

Sambil mengutamakan pilihan gaya, adalah penting untuk menangani potensi kelemahan dan skop dikaitkan dengan menetapkan kaedah prototaip di dalam fungsi pembina. Pertimbangkan struktur kod berikut:

Struktur 1:

<code class="javascript">var Filter = function(category, value) {
  this.category = category;
  this.value = value;

  // product is a JSON object
  Filter.prototype.checkProduct = function(product) {
    // run some checks
    return is_match;
  }
};</code>

Struktur 2:

<code class="javascript">var Filter = function(category, value) {
  this.category = category;
  this.value = value;
};

Filter.prototype.checkProduct = function(product) {
  // run some checks
  return is_match;
}</code>

Kelemahan dan Isu Skop:

1. Tugasan Prototaip Berulang dan Penciptaan Fungsi:
Dalam Struktur 1, prototaip ditetapkan semula berulang kali dengan setiap penciptaan tika. Ini bukan sahaja mengulangi tugasan tetapi juga mencipta objek fungsi baharu untuk setiap tika.

2. Isu Skop Tidak Dijangka:
Struktur 1 boleh membawa kepada isu skop yang tidak dijangka. Jika kaedah prototaip merujuk pembolehubah tempatan pembina, struktur pertama boleh mengakibatkan tingkah laku yang tidak diingini. Pertimbangkan contoh berikut:

<code class="javascript">var Counter = function(initialValue) {
  var value = initialValue;

  // product is a JSON object
  Counter.prototype.get = function() {
      return value++;
  }
};

var c1 = new Counter(0);
var c2 = new Counter(10);
console.log(c1.get());    // outputs 10, should output 0</code>

Dalam kes ini, kaedah get yang dibuat untuk setiap tika berkongsi objek prototaip yang sama. Akibatnya, pembolehubah nilai ditambah dan dikongsi merentas kejadian, membawa kepada output yang salah.

Pertimbangan Lain:

  • Struktur 1 menghalang akses luaran kepada prototaip melalui Filter.prototype.checkProduct.apply().
  • Menurut prestasi, memberikan kaedah terus kepada contoh objek mungkin lebih cekap daripada menggunakan prototaip.
  • Menetapkan kaedah prototaip di dalam pembina boleh membawa kepada kesilapan pengaturcaraan, terutamanya apabila merujuk pembolehubah tempatan.

Kesimpulan:

Walaupun pilihan peribadi mungkin berbeza-beza, adalah penting untuk mengetahui potensi kelemahan dan isu skop yang berkaitan dengan menetapkan kaedah prototaip di dalam fungsi pembina. Untuk kebolehpercayaan dan kebolehselenggaraan, struktur kod kedua biasanya disyorkan.

Atas ialah kandungan terperinci Mengapa memberikan kaedah prototaip di dalam fungsi pembina secara amnya dianggap sebagai amalan buruk dalam JavaScript?. 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