Rumah >hujung hadapan web >tutorial js >Kaedah panggilan ajaib() dalam petua JavaScript_javascript

Kaedah panggilan ajaib() dalam petua JavaScript_javascript

WBOY
WBOYasal
2016-05-16 16:10:061137semak imbas

Mula-mula, mari kita lihat penjelasan rasmi call(), "Panggil kaedah objek dan gantikan objek semasa dengan objek lain selepas membaca penjelasan ini, anda mungkin lebih keliru. Lihat contoh:

Salin kod Kod adalah seperti berikut:

var x = "Saya pembolehubah global"; //Takrifkan pembolehubah global x
function a(){ //Takrifkan struktur kelas fungsi a 
This.x = "Saya mengisytiharkannya dalam struktur kelas fungsi a"; }
//Tentukan fungsi normal untuk memunculkan nilai pembolehubah x yang terkandung dalam penunjuk semasa
fungsi f(){  
makluman (ini.x);
}
//Nilai pulangan ialah "Saya mengisytiharkannya dalam struktur kelas fungsi a"
f.call(new a());

Pemahaman saya ialah f.call(new a()) menyalin fungsi (sebenarnya juga objek) f ke objek yang dipanggil "new a()" untuk analisis Sebenarnya, hasil analisis adalah sama dengan kod berikut:

Salin kod Kod adalah seperti berikut:
fungsi a(){
​this.x = "Saya mengisytiharkannya dalam struktur kelas fungsi a";
makluman(ini.x); }
a();


Cuma skop pembolehubah Dalam contoh di atas, f diwarisi sepenuhnya oleh objek pembina a Jika ini tidak mencukupi untuk menunjukkan bahawa a.call(b) ialah corak warisan, maka mari kita lihat penggunaan yang lebih berperisa warisan.


fungsi f(){ 
This.a ="a";
This.b = function(){
makluman("b");
}
}
fungsi e(){ 
f.call(ini);
}
var c = new e();
makluman(c.a); //Timbul a
c.b(); //Timbul b


Dalam contoh ini, sesiapa yang tahu cara menggunakan penyemak imbas boleh melihat bahawa e sepenuhnya mewarisi sifat dan kaedah f Jika tidak, ia tidak dapat dijelaskan, kerana atribut a dan b tidak ditakrifkan dalam e, jadi adalah wajar untuk membuat kesimpulan. bahawa Dalam objek contoh c e, kedua-dua atribut ini tidak akan muncul.
Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn