Rumah  >  Artikel  >  hujung hadapan web  >  Nota belajar semasa panggilan dan gunakan dalam kemahiran Javascript_javascript

Nota belajar semasa panggilan dan gunakan dalam kemahiran Javascript_javascript

WBOY
WBOYasal
2016-05-16 16:35:59997semak imbas

Mari kita lihat dahulu penjelasan panggilan dalam MDN

Kaedah panggilan() memanggil fungsi atau kaedah menggunakan nilai ini yang ditentukan dan beberapa nilai parameter yang ditentukan.

Nota: Fungsi kaedah ini adalah serupa dengan kaedah apply() Satu-satunya perbezaan ialah kaedah call() menerima senarai beberapa parameter, manakala kaedah apply() menerima tatasusunan yang mengandungi berbilang parameter.

Tatabahasa

fun.call(thisArg[, arg1[, arg2[, ...]]]) 

Parameter
thisArg

Nilai ini ditentukan apabila fungsi keseronokan sedang berjalan. Perlu diingatkan bahawa nilai ini yang dinyatakan tidak semestinya nilai ini sebenar apabila fungsi dilaksanakan Jika fungsi dalam mod tidak ketat, nilai ini yang dinyatakan sebagai null dan undefined akan secara automatik menunjuk ke objek global (dalam. penyemak imbas, ini adalah objek tetingkap), dan ini yang nilainya ialah nilai primitif (nombor, rentetan, nilai Boolean) akan menunjuk ke objek pembalut automatik bagi nilai primitif.

arg1, arg2, ...

Senarai parameter yang ditentukan.

Contoh di MDN pada mulanya tidak mudah difahami, jadi saya menyiarkannya di sini Jika anda berminat, anda boleh menyemaknya sendiri call-Javascript

ThisArg di sini ditafsirkan sebagai nilai ini yang dinyatakan semasa keseronokan berjalan, maksudnya, selepas menggunakan panggilan, ini dalam keseronokan menunjuk ke thisArg? Tengok kod

 var p="456"; 
 function f1(){ 
  this.p="123"; 
 } 
 function f2() { 
  console.log(this.p); 
 } 
 f2();       //456  f2.call(f1());  //123  f2.apply(f1());  //123

Output pertama ialah pembolehubah global panggilan Kemudian, disebabkan penggunaan panggilan dan guna, ini dalam f2 menunjuk kepada f1, jadi output menjadi 123. Malah, f1 meminjam kaedah f2 dan mengeluarkannya. p sendiri

Pada masa ini, padamkan this.p dalam f1(), dan tiga 456s akan dikeluarkan, yang mengesahkan bahawa apabila ini adalah batal atau tidak ditentukan, ia sebenarnya menunjukkan kepada pembolehubah global

Bagi menunjuk kepada nilai asal, ia menunjukkan kepada objek pembungkusannya Memandangkan objek pembungkusan yang saya faham adalah sementara, dan ujian hanya mengeluarkan jenis nilai asal dan bukannya objek, bagaimana saya boleh membuktikannya di sini sesiapa tahu, saya harap anda boleh Berbincang dengan saya, terima kasih!

Memandangkan panggilan boleh merealisasikan satu objek meminjam objek lain, bukankah ia juga boleh merealisasikan warisan? Tengok kod

 function f1(){ 
  this.father="father"
 } 
 function f2() { 
  f1.call(this); 
  this.child="child"; 
 } var test=new f2(); 
console.log(test.father);  //father

Tiada bapa dalam ujian, kerana

dalam f2()

f1.panggil(ini);

Ini di sini menunjukkan kepada f2, yang bermaksud bahawa f2 meminjam kaedah f1, yang sebenarnya merealisasikan warisan

Mari bincangkan tentang parameter di sini Parameter di sini dihantar untuk menyeronokkan

 function f1(){ 
  this.p="123"; 
 } 
 function f2(x) { 
  console.log(this.p); 
  console.log(x); 
 } 
 f2.call(f1(),456);   //123 
//456

Output pertama ialah 123 kerana p dalam f1, dan 456 seterusnya ialah parameter yang dihantar ke f2, yang mudah difahami

Perkara utama ialah memberi perhatian kepada perbezaan antara parameter dalam panggilan dan digunakan

panggilan dihantar satu demi satu, dan permohonan dihantar dalam tatasusunan

  function f1(){ 
  this.p="测试call"; 
 } 
 function f2(x,y,z) { 
  console.log(this.p); 
  console.log(x); 
  console.log(y); 
  console.log(z); 
 } 
   function f3(){ 
  this.p="测试apply"; 
 } 
 f2.call(f1(),4,5,6);  
 f2.call(f1(),[4,5,6]);  
 f2.apply(f3(),[4,5,6]); 
 f2.apply(f3(),4,5,6);

Anda boleh lihat hasilnya di sini

Panggilan ujian pertama dikeluarkan dengan betul

Memandangkan panggilan ujian kedua dihantar dalam tatasusunan, ia mula-mula mengeluarkan tatasusunan dan kemudian dua tidak ditentukan

Bahagian ketiga ujian menggunakan output dengan betul

Perenggan keempat secara langsung melaporkan ralat disebabkan format parameter yang salah

Perbezaan di sini sepatutnya jelas

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