Rumah >hujung hadapan web >tutorial js >ini, ini, bincangkan ini dalam javascript sekali lagi, kemahiran javascript yang sangat komprehensif (klasik).
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);
Lihat, apa yang muncul? Ia sama ada "tetingkap objek" atau "objek".
alert(this === window);
Hasilnya adalah 'benar', jadi sekarang objek yang memanggilnya ialah tetingkap
2
var test = function(){ alert(this); } test();
var test = function(){ alert(this === window); } test();
3
Datang lagi
var test = function(){ alert(this === window); } new test();
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();
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();
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);
6. Keseluruhan kompleks
Adakah ini "benar" atau "palsu"?
var test ={ 'a':1, 'b':{ 'b1':function(){ alert(this === test); } } } test.b.b1();
var test ={ 'a':1, 'b':{ 'b1':function(){ alert(this === test.b); } } } test.b.b1();7. Lebih baik menjadikannya lebih rumit
Tidakkah anda fikir "benar" muncul Menurut teori di atas, 'innerTest' dipanggil dengan 'ujian', dan kemudian 'ini' menunjukkan 'ujian'?
var test = function(){ var innerTest = function(){ alert(this === test); } innerTest(); } test();
var test = function(){ var innerTest = function(){ alert(this === window); var innerTest1 = function(){ alert(this === window); } innerTest1(); } innerTest(); } test();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);
Kemudian perkara seperti 'panggilan' akan menjadi serupa
var test = function(){ alert(this === test1); } var test1 = { } test.apply(test1);
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();10 yang tinggal, mungkin objek 'dom'
Anda harus faham selepas membaca perkara di atas, 'ini' di dalamnya masing-masing mewakili Shenma