Menetapkan Kaedah Prototaip Dalam Fungsi Pembina: Potensi Perangkap
Secara gaya, sesetengah lebih suka struktur berikut untuk menentukan kaedah prototaip:
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; } };
Walau bagaimanapun, pendekatan ini mempunyai beberapa kelemahan berbanding struktur alternatif:
var Filter = function( category, value ){ this.category = category; this.value = value; };// var Filter = function(){...} Filter.prototype.checkProduct = function( product ){ // run some checks return is_match; }
Kelemahan Fungsian:
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
Dalam senario ini, get() mengembalikan nilai nilai pembolehubah tempatan c2 dan bukannya c1 kerana penutupan kaedah merujuk nilai yang ditakrifkan terkini pada prototaip.
Pertimbangan Lain:
Kesimpulan :
Walaupun struktur pertama mungkin menarik dari segi gaya, ia boleh memperkenalkan kelemahan fungsi dan isu skop. Secara umumnya disyorkan untuk menetapkan kaedah prototaip di luar fungsi pembina (seperti dalam struktur kedua) untuk mengelakkan masalah yang berpotensi.
Atas ialah kandungan terperinci Mengapa Kaedah Prototaip Perlu Ditakrifkan di Luar Fungsi Pembina?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!