Penggunaan 1 (penggunaan umum):
Ekspresinya adalah: sebuah objek.metode.panggilan(objek lain), yang berarti mengganti objek saat ini dengan objek lain dan mengeksekusi metode dari objek saat ini. Mari kita lihat contohnya terlebih dahulu:
Copy kode kodenya sebagai berikut:
fungsi Kelas1(){
ini.nama = "kelas1";
ini.showName = fungsi(){
alert(ini.nama);
}
}
fungsi Kelas2(){
ini.nama = "kelas2";
}
var c1 = Kelas1 baru();
var c2 = Kelas2 baru();
c1.showName.panggilan(c2);
c2.showName(); //Tidak dapat dijalankan
Pertama-tama kita mendefinisikan dua fungsi masing-masing, yaitu Class1 dan Class2. Perbedaan utama di antara keduanya adalah Class2 memiliki satu metode showName() lebih banyak daripada Class1. Kemudian objek c1 dan c2 yang sesuai dengan Kelas1 dan Kelas2 didefinisikan. Saat ini, kita mengetahui dengan jelas bahwa c1 memiliki metode showName() tetapi c2 tidak. Namun keajaiban terjadi. Saat kita menjalankan c1.shoName.call(c2), akan muncul nilai nama c2, yaitu "class2". Sebenarnya kita masih mengeksekusi metode c1, namun kita hanya mengganti sementara objek c2 dengan objek c1. Setelah dieksekusi, metode tersebut masih sama seperti saat didefinisikan, dan c2 tidak memiliki metode apa pun lagi. Untuk mendeteksi apakah c2 memiliki lebih banyak metode, contoh menambahkan baris c2.showNmae(); Ini tidak dapat dijalankan, dan browser akan melaporkan kesalahan Object #<Class2> has no method 'showName'.
Mengapa melakukan ini? Seperti disebutkan sebelumnya, ini adalah metode penggunaan sementara, kami hanya menggunakannya untuk pemrograman yang efisien. Tapi ini bukan tanpa batasan. Misalkan c1 dan c2 digunakan untuk mewakili objek yang diganti dan objek pengganti, dan fun1 digunakan untuk mewakili metode bawaan c1. 1. Jika fun1 tidak memerlukan parameter dan tidak menggunakan variabel lokal apa pun di fungsi induk, sebenarnya tidak ada perbedaan antara c1.fun1.call(c2) dan c1.fun1(); menggunakan variabel fungsi induk, maka diperlukan untuk menghasilkan variabel yang digunakan oleh fun1 dengan nama yang sama pada fungsi c1 dan c2; 3. Jika fun1 memerlukan parameter, formulir harus ditulis ulang sebagai c1.fun1.call(c2 , parameter 1, Parameter 2, ...parameter n), saat ini nama variabel pada fungsi yang menghasilkan c1 tidak harus memiliki nama yang sama dengan nama variabel pada fungsi yang menghasilkan c2, hanya perlu berkorespondensi. Faktanya, saat kita menggunakan call, c2 dan c1 seringkali memiliki kemiripan struktur dan fungsi, sehingga tiga poin di atas mudah untuk dihindari.
Penggunaan dua:
Digunakan selama proses definisi fungsi, dalam bentuk: fungsi lain yang ada.panggilan(ini), yang dapat mengkloning semua variabel dan metode dari fungsi lain yang ada ke dalam fungsinya sendiri, mencapai fungsi yang mirip dengan warisan. Mari kita lihat sebuah contoh:
Copy kode kodenya sebagai berikut:
fungsi Hewan(nama){
ini.nama = nama;
ini.showName = fungsi(){
alert(ini.nama);
}
};
var hewan = Hewan baru("hewan_kecil");
hewan.showName(); //alert("hewan_kecil")
fungsi Kucing(nama){
Animal.call(ini, nama);
};
//var Animal = null; //Batalkan komentar dan cobalah
var kucing = Kucing baru("kucing_hitam");
kucing.namatampilan(); //peringatan("kucing_hitam")