Sebelum mengacu pada konsep di atas, pertama -tama ingin berbicara tentang parameter tersembunyi fungsi dalam fungsi dalam javascript: argumen
Argumen
Objek ini mewakili parameter fungsi yang dieksekusi dan menyebut fungsinya.
[Fungsi.] Argumen [n]
Fungsi Parameter: Opsi. Nama objek fungsi saat ini dieksekusi. N: Opsi. Untuk melewati indeks nilai parameter dari 0 ke objek fungsi.
menjelaskan
Argumen adalah objek tersembunyi yang dibuat selain parameter yang ditentukan saat fungsi panggilan. 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 objek.
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 += "/n/n"
Untuk (i = 0; i <numargs; i ++) {// Dapatkan konten parameter.
s + = "arg" + i + "=" + argumen [i] + "/n";
}
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.
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 teks 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.Callee
Parameter fungsi opsional adalah nama objek fungsi yang saat ini sedang dieksekusi.
menjelaskan
Nilai awal atribut Callee adalah objek fungsi yang dijalankan.
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 0;
kalau tidak
Return n + argumen.callee (n -1)
}
Fungsi rekursi yang lebih umum:
Salin kode kode sebagai berikut:
var sum = function (n) {
if (n <= 0)
Kembali 0;
kalau tidak
Return 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 ...]);
Dengan kata lain, semua ini pointer ini di dalam fungsi akan ditugaskan ke Thisarg, yang dapat mencapai tujuan menjalankan fungsi sebagai objek lain.
Deskripsi Terapkan
Jika Argarray bukan array yang efektif atau bukan objek argumen, itu akan menyebabkan typerror.
Tanpa parameter Argarray dan Thisarg, objek global akan digunakan sebagai Thisarg,
Dan tidak dapat diteruskan pada parameter apa pun.
Deskripsi panggilan
Metode panggilan dapat mengubah konteks objek fungsi dari konteks awal ke objek baru yang ditentukan oleh ThisArg.
Jika tidak memberikan parameter ThisArg, maka objek global digunakan sebagai thisarg
Keterampilan Terkait:
Ada teknik lain dalam aplikasi panggilan dan berlaku, yaitu, setelah menggunakan fungsi lain (kelas) dengan panggilan dan berlaku, fungsi saat ini (kelas) memiliki metode atau atribut metode atau atribut lain. "warisan". 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 Apply untuk membuat model yang ditentukan dalam JavaScript Framework Propro.
Faktanya, kode saat ini adalah sebagai berikut:
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, Anda dapat mengimplementasikan mode pembuatan kelas dalam prototipe
Contoh:
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 = vene baru ("moto");
moto.showself ();