Sebelum mengacu pada konsep di atas, pertama -tama ingin berbicara tentang parameter tersembunyi fungsi dalam fungsi dalam JavaScript:
Argumen
Argumen mewakili parameter yang dieksekusi dan fungsi memanggil fungsinya. [fungsi.] Parameter argumen [n]
Fungsi: Opsi. Nama objek fungsi saat ini dieksekusi.
N: Opsi. Untuk melewati indeks nilai parameter dari 0 ke objek fungsi. Ini menunjukkan bahwa argumeen adalah objek tersembunyi yang dibuat selain parameter yang ditentukan ketika fungsi dipanggil. Argumen adalah objek yang mirip dengan array tetapi bukan array. memiliki panjang atribut panjang array. Ada juga parameter bahwa objek argumen menyimpan fungsi yang sebenarnya diteruskan ke fungsi, tidak terbatas pada daftar parameter yang ditentukan oleh pernyataan fungsional, dan tidak dapat secara eksplisit dibuat untuk membuat objek argumen. Objek argumen hanya dapat tersedia di awal fungsi.
Contoh berikut menjelaskan properti ini secara rinci
Salin kode kode sebagai berikut:
// Penggunaan objek argumen
Fungsi argtest (a, b) {{
var i, s = "fungsi argtest diharapkan";
var numargs = argumen.length; // Dapatkan nilai parameter yang lewat.
Var expargs = argtest.length; // Dapatkan nilai parameter yang diharapkan.
if (expargs <2)
s + = expargs + "argumen.";
kalau tidak
S + = Expargs + "Argumen." ;;
if (numargs <2)
s + = numargs + "dilewati.";
kalau tidak
s + = numargs + "kami lulus.";
S += ""
Untuk (i = 0; i <numargs; i ++) {// Dapatkan konten parameter.
s + = "arg" + i + "=" + argumen + "" "";
}
Return (s); // kembalikan daftar parameter.
}
Berikut adalah kode yang menjelaskan bahwa argumen bukan array (kelas array):
Salin kode kode sebagai berikut:
Array.prototype.setValue = 1;
peringatan (array baru (). Selfvalue);
tes fungsi () {
Waspada (argumen.selfvalue);
}
Anda akan menemukan tampilan peringatan pertama 1, yang berarti bahwa objek array memiliki atribut nilai -diri dengan nilai 1. Ketika Anda menyebut fungsi testagumens, Anda akan menemukan bahwa "tidak ditentukan" menunjukkan bahwa itu bukan atribut argumen, itu adalah, atribut argumen, yaitu argumen bukan objek array.
Tambahkan cara sederhana untuk ditambahkan di sini: peringatan (argumen contoh array);
Peringatan (argumen instance dari objek);
Penelepon
Mengembalikan referensi ke fungsi yang memanggil fungsi saat ini.
FunctionName.caller
Objek FunctionName adalah nama fungsi eksekusi.
menjelaskan
Untuk fungsi, atribut penelepon hanya didefinisikan ketika fungsi dieksekusi. Jika fungsi dipanggil dari lapisan atas, maka penelepon berisi nol. Jika atribut penelepon digunakan dalam konteks string, hasilnya sama dengan functionName.tstring, yaitu, itu menunjukkan bahwa fungsi fungsi ditampilkan.
Catatan: function.tostring () dapat mewujudkan fungsi anti -kompilasi fungsi.
Contoh berikut menggambarkan penggunaan atribut penelepon:
Salin kode kode sebagai berikut:
// demo penelepon {
fungsi calldemo () {
if (callerdemo.caller) {
var a = callerdemo.caller.toString ();
waspada (a);
} Kalau tidak {
Peringatan ("Ini adalah fungsi teratas");
}
}
function handlecaller () {
Callerdemo ();
}
Callee
Mengembalikan teks objek fungsi yang sedang dieksekusi, teks dari objek fungsi yang ditentukan. [Fungsi.] Argumen. Parameter opsional Callee adalah nama objek fungsi yang saat ini sedang dieksekusi. Jelaskan bahwa nilai awal atribut Callee adalah objek fungsi yang sedang dieksekusi. Atribut Callee adalah anggota dari objek argumen, yang menunjukkan referensi ke objek fungsi itu sendiri, yang kondusif terhadap rekursif fungsi anonim atau pengemasan fungsi. Atribut ini hanya tersedia ketika fungsi korelasi dieksekusi. Perlu dicatat bahwa Callee memiliki atribut panjang. Argumen. Panjang adalah panjang parameter yang solid, dan argumen. Callee.length adalah panjang parameter, yang dapat menentukan apakah panjang parameter konsisten dengan panjang parameter aktual.
Contoh teladan
Salin kode kode sebagai berikut:
// callee dapat mencetak dirinya sendiri
Fungsi CalledeMo () {
Peringatan (argumen.callee);
}
// Digunakan untuk memverifikasi parameter
Fungsi calleelleThDemo (arg1, arg2) {{
if (arguments.length == arguments.callee.length) {
Window.alert ("Memverifikasi ginseng dan panjang parameter padat sudah benar!");
Kembali;
} Kalau tidak {
Peringatan ("Panjang parameter padat:" +argumen.length);
Alert ("" Bentuk yang Perang: +Argumen.Callee.Length);
}
}
// Perhitungan Rekursif
var sum = function (n) {
if (n <= 0)
Kembali 1;
kalau tidak
Return n + argumen.callee (n -1)
} Dibandingkan dengan fungsi rekursif umum: var sum = fungsi (n) {
if (1 == n) return 1;
Lain mengembalikan n + sum (n-1);
}
Pada saat panggilan: waspada (jumlah (100));
Di antara mereka, fungsi berisi referensi untuk jumlah itu sendiri.
melamar dan menelepon
Peran mereka adalah untuk mengikat fungsi ke objek lain.
berlaku (Thisarg, Argarray);
hubungi (thisarg [, arg1, arg2 ...]);
Artinya, pointer ini di dalam semua fungsi akan ditugaskan ke Thisarg, yang dapat mewujudkan tujuan dari tujuan menggunakan fungsi sebagai metode metode lain.
Jika ada parameter Argarray dan Thisarg tidak disediakan, objek global akan digunakan sebagai Thisarg dan tidak dapat diteruskan pada parameter apa pun. Metode panggilan deskripsi panggilan dapat mengubah konteks objek fungsi dari konteks awal ke objek baru yang ditentukan oleh ThisArg.
Jika Anda tidak memberikan parameter ThisArg, maka objek global digunakan sebagai teknik terkait Thisarg: setelah menerapkan panggilan dan berlaku, ada teknik lain di dalamnya. fungsi saat ini (kelas).
Lihatlah contoh berikut:
Salin kode kode sebagai berikut:
// Demonstrasi yang diwariskan
Function base () {
this.member = "dnnnsun_member";
this.method = function () {
Window.alert (this.member);
}
}
fungsi ekspedisi () {) {
base.call (ini);
Window.alert (anggota);
Window.alert (this.method);
}
Contoh -contoh di atas dapat dilihat bahwa setelah panggilan, diperpanjang dapat mewarisi metode dan atribut basis. Ngomong -ngomong, gunakan berlaku untuk membuat model definisi dalam prototipe kerangka kerja JavaScript.
Salin kode kode sebagai berikut:
var class = {
Create: function () {
Return function () {
this.initialize.Apply (ini, argumen);
}
}
}
Analisis: Dari kode, objek hanya berisi satu metode: buat, yang mengembalikan fungsi, yaitu kelas. Tetapi ini juga merupakan konstruktor kelas, di mana inisialisasi dipanggil, dan metode ini adalah fungsi inisialisasi yang ditentukan selama pembuatan kelas. Melalui cara ini, contoh pola penciptaan kelas dalam prototipe dapat diimplementasikan:
Salin kode kode sebagai berikut:
var kendaraan = class.create ();
vehicle.prototype = {
inisialisasi: function (type) {
this.type = type;
}
Showself: function () {{)
Waspada ("Ini adalah"+ this.type);
}
} Var moto = kendaraan baru ("moto");
moto.showself ();