Pertama -tama mari kita lihat penjelasan resmi tentang panggilan (), "Memanggil satu metode objek dan mengganti objek saat ini dengan objek lain." Setelah membaca penjelasan ini, Anda mungkin lebih bingung. Lihat contoh:
Salinan kode adalah sebagai berikut:
var x = "Saya variabel global"; // Tentukan variabel global x
fungsi a () {// Tentukan struktur kelas fungsi a
this.x = "Saya mendeklarasikannya dalam struktur kelas fungsi A";
}
// Tentukan fungsi normal dan masukkan nilai variabel x yang terkandung dalam pointer saat ini.
fungsi f () {
waspada (this.x);
}
// Nilai pengembalian adalah "Saya dinyatakan dalam struktur kelas fungsi A"
f.call (a new a ());
Pemahaman saya adalah bahwa f.call (a new a ()) adalah untuk menyalin fungsi (sebenarnya objek) f ke objek yang disebut "baru a ()" untuk parsing. Bahkan, itu sama dengan hasil parsing dari kode berikut:
Salinan kode adalah sebagai berikut:
fungsi a () {
this.x = "Saya mendeklarasikannya dalam struktur kelas fungsi A";
waspada (this.x);
}
A();
Hanya saja ruang lingkup variabel X berbeda saat ini. Ya ... sepertinya memiliki sedikit warisan, bukan? Dalam contoh di atas, F sepenuhnya diwariskan oleh objek kekuatan konstruktor a. Jika ini tidak cukup untuk menunjukkan bahwa a.call (b) adalah mode warisan, maka mari kita lihat penggunaan yang lebih warisan.
Salinan kode adalah sebagai berikut:
fungsi f () {
this.a = "a";
this.b = function () {
peringatan ("b");
}
}
fungsi e () {
f.call (ini);
}
var c = e baru ();
peringatan (CA); // popt a
CB (); // Popt b
Dalam contoh ini, selama teman -teman yang tahu cara menggunakan browser, mereka dapat melihat bahwa E sepenuhnya mewarisi sifat dan metode F, jika tidak, itu tidak akan dijelaskan, karena atribut A dan B tidak didefinisikan dalam e. Kemudian, menurut akal sehat, kedua properti ini tidak akan muncul pada objek instan C dari e.