ini, ini, bincangkan ini dalam javascript sekali lagi, kemahiran javascript yang sangat komprehensif (klasik).

WBOY
Lepaskan: 2016-05-16 15:21:31
asal
1286 orang telah melayarinya

JavaScript ialah bahasa skrip dan oleh itu dianggap oleh ramai sebagai mudah dipelajari. Sebaliknya, JavaScript menyokong ciri lanjutan seperti pengaturcaraan berfungsi, penutupan, warisan berasaskan prototaip dan banyak lagi. Artikel ini hanya mengambil satu contoh: kata kunci ini dalam JavaScript, dan menganalisis maknanya dalam situasi berbeza dengan cara yang mudah dan mudah difahami, sebab untuk situasi ini dan kaedah mengikat ini disediakan oleh alat JavaScript seperti Dojo . Boleh dikatakan bahawa hanya dengan menguasai kata kunci ini dengan betul dalam JavaScript anda boleh memasuki ambang bahasa JavaScript.

Untuk perkara ini dalam js, ramai orang telah menjelaskannya. Ia kelihatan sangat mewah.

Petikan pertama yang lebih mewah daripada Script Home, ya ini

Baiklah, inilah penjelasan saya yang mengecewakan

Argumen: ini bukan pembolehubah, bukan harta dan tidak boleh diberikan nilai Ia sentiasa menunjuk ke objek yang memanggilnya

Rasanya terlalu samar, cuma ingat perkara yang paling penting: "Ia sentiasa menunjuk ke objek yang memanggilnya", jadi jika anda menjumpai objek yang memanggil ini, anda akan tahu kepada siapa ini menunjuk

1

alert(this); 
Salin selepas log masuk

Lihat, apa yang muncul? Ia sama ada "tetingkap objek" atau "objek".

alert(this === window); 
Salin selepas log masuk

Hasilnya adalah 'benar', jadi sekarang objek yang memanggilnya ialah tetingkap

2

var test = function(){
  alert(this);
}
test(); 
Salin selepas log masuk
Teka apa yang muncul di atas, adakah ia sama dengan "amaran(ini)"


var test = function(){
  alert(this === window);
 }
test(); 
Salin selepas log masuk
Jalankan kod di atas, adakah 'true' muncul?


Adakah ini kesudahannya?


Jika ia sangat mudah, mengapa ramai orang membincangkan burung ini?


3

Datang lagi

var test = function(){
  alert(this === window);
 }
new test(); 
Salin selepas log masuk
Hei, kenapa kali ini 'palsu'?

Ingat bahawa "ini sentiasa menunjuk ke objek yang memanggilnya". panggilan kepadanya masih "tetingkap" (jangan keliru, walaupun fungsi itu adalah objek, tetapi ia dipanggil oleh objek lain pada "3.", "baru" digunakan sebenarnya berubah. Ini ialah Pembina, pembina mencipta objek kosong baru apabila ia dicipta, iaitu, "ujian baru()" mencipta objek baru, dan kemudian objek ini menunjuk ke kod dalam fungsi "ujian", jadi ini bukan lagi objek tetingkap, tetapi objek baharu yang dicipta oleh pembina ini.


4

Dengan hujah di atas, kini jelas!
var test ={
  'a':1,
  'b':function(){
   alert(this === test)
  }
 }
test.b(); 
Salin selepas log masuk


5.

jadi, anda tidak fikir keputusan itu "salah", anda silap, walaupun nilai 'test1' ialah 'test', bukankah 'test1' masih menjadi objek 'test', ia mempunyai objek baru, anda faham buat masa ini Mereka dirujuk kepada objek yang sama Berikut adalah kod di bawah sebagai bukti
var test ={
  'a':1,
  'b':function(){
   alert(this === test)
  }
 }
var test1 = test;
test1.b(); 
Salin selepas log masuk

Jika "1" muncul, datang dan tegur saya
var test ={
  'a':1,
  'b':function(){
   alert(this === test)
  }
 }
var test1 = test;
test.a = 2;
alert(test1.a); 
Salin selepas log masuk


6. Keseluruhan kompleks

Adakah ini "benar" atau "palsu"?
var test ={
  'a':1,
  'b':{
   'b1':function(){
    alert(this === test);
   }
  }
 }
test.b.b1(); 
Salin selepas log masuk
Mengikut teori di atas, pada masa ini "ini" tidak lagi dipanggil secara langsung dengan 'ujian', tetapi dengan 'test.b', seperti yang dibuktikan oleh sekeping kod berikut


var test ={
  'a':1,
  'b':{
   'b1':function(){
    alert(this === test.b);
   }
  }
 }
test.b.b1(); 
Salin selepas log masuk
7. Lebih baik menjadikannya lebih rumit

Tidakkah anda fikir "benar" muncul Menurut teori di atas, 'innerTest' dipanggil dengan 'ujian', dan kemudian 'ini' menunjukkan 'ujian'?
Nah, kesilapan terletak pada siapa yang dipanggil 'innerTest' Sebenarnya, fungsi ini dipanggil oleh objek 'window' Walaupun anda bersarang seribu lapisan, setiap fungsi dipanggil oleh objek 'window' . Sekeping kod sebagai bukti
var test = function(){
  var innerTest = function(){
   alert(this === test);
  }
  innerTest();
 }
test(); 
Salin selepas log masuk


var test = function(){
  var innerTest = function(){
   alert(this === window);
   var innerTest1 = function(){
    alert(this === window);
   }
   innerTest1();
  }
  innerTest();
 }
test(); 
Salin selepas log masuk
8 lagi istimewa

Saya rasa semua orang akan meneka dengan betul Fungsi fungsi ini adalah untuk "memanggil kaedah objek dan menggantikan objek semasa dengan objek lain Jadi objek 'tetingkap' telah digantikan dengan 'test1', secara semula jadi ia adalah 'palsu', berikut ialah kod berikut untuk membuktikan
var test = function(){
  alert(this === window);
 }
var test1 = {
}
test.apply(test1); 
Salin selepas log masuk

Kemudian perkara seperti 'panggilan' akan menjadi serupa
var test = function(){
  alert(this === test1);
 }
 var test1 = {
  }
test.apply(test1); 
Salin selepas log masuk


9. Satu lagi warisan prototaip, yang berbeza daripada warisan literal

var test = function(){
 }
 var my = function(){
  this.a = function(){
   alert(this === mytest2);
  }
 }
 var mytest = new my();
 test.prototype = mytest;
 var mytest2 = new test();
 mytest2.a(); 
Salin selepas log masuk
10 yang tinggal, mungkin objek 'dom'

Anda harus faham selepas membaca perkara di atas, 'ini' di dalamnya masing-masing mewakili Shenma

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!