Dalam pemrograman berorientasi objek, banyak bahasa mendukung fungsi berlebih dan dapat melakukan operasi yang berbeda sesuai dengan jumlah dan jenis parameter yang berbeda yang dilewati oleh fungsi. Namun, JS tidak mendukungnya, jadi kita perlu melakukan beberapa tindakan ekstra kecil.
Dalam konteks eksekusi fungsi JS, ada variabel yang menarik yang disebut argumen. Ini menyimpan semua parameter yang dilewati selama eksekusi fungsi dalam bentuk array, bahkan jika definisi fungsi tidak menentukan begitu banyak parameter formal. Fitur khusus lainnya adalah dibandingkan dengan jenis array, variabel argumen memiliki dan hanya memiliki satu atribut panjang. Metode array, seperti dorongan, pop, dll., Tidak memilikinya. Ini hanya "pseudo-array": ia memiliki atribut panjang, dan array yang disimpan dapat diakses oleh karakter akses array [], dan hanya baca dan tidak dapat ditulis.
1. Kelebihan angka yang berbeda
Seharusnya sangat jelas di sini bahwa Anda dapat menggunakan atribut panjang fungsi argumen untuk menilai.
Salinan kode adalah sebagai berikut:
<type skrip = "Teks/JavaScript">
function talk (msg, handler) {
var len = argumen.length;
// Jalankan saat melewati parameter
if (len == 1) {
peringatan ("Fungsi mengatakan:"+msg);
}
// Jalankan saat dua parameter dilewatkan
lain jika (len == 2) {
Handler (MSG);
}
}
bicara ("demo");
bicara ("demo", fungsi (w) {alert ("handler mengatakan:"+w);});
</script>
2. Kelebihan berbagai jenis parameter
Untuk bahasa yang diketik secara dinamis seperti JS, sifat sewenang -wenang dari deklarasi variabel meremehkan pentingnya jenis variabel yang ketat dalam pikiran pengembang (PS: juga berdasarkan sistem ECMA, seperti memperkenalkan jenis wajib dari deklarasi variabel). Banyak bug yang tidak terduga sebenarnya disebabkan oleh konversi otomatis dari jenis variabel ini. Faktanya, JS menyediakan metode yang sangat akurat untuk mendeteksi jenis variabel secara ketat. Yang lebih umum adalah metode jenis dan atribut konstruktor.
1. Jenis variabel variabel mengembalikan jenis variabel
Salinan kode adalah sebagai berikut:
temp = "katakan"; //rangkaian
temp = 1; //nomor
temp = tidak terdefinisi; //belum diartikan
temp = null; //obyek
temp = {}; //obyek
temp = []; //obyek
temp = true; // boolean
temp = function () {} // fungsi
peringatan (tipe temp);
Melalui tes di atas, Anda dapat melihat bahwa untuk nol, objek, dan array, semua jenis objek yang mengembalikan, dan menggunakan metode berikut dapat menyelesaikan masalah ini.
2. Atribut Konstruktor Mendeteksi Jenis Variabel
Setiap objek dalam JS memiliki atribut konstruktor, yang digunakan untuk merujuk fungsi yang membuat objek ini. Dengan menilai referensi ini, jenis variabel dapat dideteksi.
Salinan kode adalah sebagai berikut:
temp = "katakan";
temp.constructor == string; //BENAR
temp = {};
temp.constructor == objek; // true
temp = [];
temp.constructor == array; // true
Melalui tes di atas, mudah untuk membedakan antara array dan variabel tipe objek. Mari kita uji objek khusus untuk melihat apa yang terjadi.
Salinan kode adalah sebagai berikut:
// Objek Kustom
function ball () {}
// instantiate suatu objek
var basketball = new bola ();
Basketball.constructor == Ball; //BENAR
Ini dapat menunjukkan bahwa atribut konstruktor juga berlaku untuk objek khusus.
Setelah memahami penerapan dua metode di atas, mari kita kembali ke simulasi kelebihan fungsi JS. Contoh berikut adalah kelebihan beban sesuai dengan jenis parameter.
Salinan kode adalah sebagai berikut:
function talk (msg) {
var t = tipe msg;
if (t == "string") {
peringatan ("Ini string");
}
lain jika (t == "angka") {
peringatan ("Ini angka");
}
}
bicara (10); // Ini string
bicara ("demo"); // Ini angka
Terlampir adalah fungsi yang sangat pintar yang secara ketat mendeteksi jenis dan angka parameter:
Salinan kode adalah sebagai berikut:
// Periksa dengan ketat jenis daftar variabel berdasarkan daftar parameter
fungsi ketat (tipe, args) {
// Pastikan bahwa jumlah dan ketik kernel parameter cocok
if (type.length! = args.length) {
// Jika panjangnya tidak cocok, pengecualian akan dilemparkan
lempar "jumlah argumen yang tidak valid. Diharapkan" + type.length + ", diterima" + args.length + "sebagai gantinya.";
}
// Perjalanan melalui setiap parameter dan periksa jenis dasarnya
untuk (var i = 0; i <args.length; i ++) {
// Jika jenis JavaScript tertentu tidak cocok, pengecualian akan dilemparkan
if (args [i] .constructor! = type [i]) {
lempar "tipe argumen tidak valid. yang diharapkan" + tipe [i] .name + ", diterima" + args [i] .constructor.name + "sebagai gantinya.";
}
}
}
// Penggunaan metode di atas
fungsi dofunction (id, name) {
// Mendeteksi jumlah dan jenis parameter
ketat ([angka, string], argumen);
..
}