Rumah  >  Artikel  >  hujung hadapan web  >  Apakah sebenarnya ini dalam kemahiran JavaScript (1)_javascript

Apakah sebenarnya ini dalam kemahiran JavaScript (1)_javascript

WBOY
WBOYasal
2016-05-16 15:26:571412semak imbas

Bagi pengaturcara yang menggunakan C, C#, Java dan bahasa berorientasikan objek lain sepanjang tahun, mereka menangani perkara ini hampir setiap hari. Dalam bahasa ini, maksud ini sangat jelas, iaitu, ia menunjukkan contoh objek semasa, dan kita boleh menggunakannya dengan yakin. Walau bagaimanapun, dalam JavaScript, bahasa dinamik, kaedah penulisan ini tidak berubah, tetapi maknanya sangat berbeza Berikut adalah contoh, menggunakan pelayar Firefox14.0.1.

Pertama, Hello World o(^▽^)o

Sudah lebih setahun sejak saya mula belajar JavaScript, bahasa pengaturcaraan yang fleksibel.

Dalam lebih daripada setahun, bahasa ini telah membawa saya bukan sahaja pulangan kerja yang tinggi, tetapi juga banyak kejutan yang tidak dijangka, membolehkan saya, seorang pelajar seni, menghargai daya tarikan pengaturcaraan.

Mulai hari ini, saya akan mengemaskini blog saya setiap hari Isnin, bukan sahaja untuk berkongsi, tetapi juga untuk memberi semangat kepada diri sendiri.

OK, mari masuk topik hari ini Hari ini kita akan bercakap tentang objek istimewa dalam javascript: ini

Rakan yang telah didedahkan kepada bahasa pengaturcaraan berorientasikan objek lain (seperti: java, C, C, dll.) mungkin sangat biasa dengan ini.

Tetapi mengapa ia sering menyebabkan kita banyak masalah dalam javascript?

Mari kita bincangkan dahulu tentang perbezaannya daripada bahasa pengaturcaraan lain

Dalam JavaScript, ini adalah objek istimewa Tidak seperti bahasa pengaturcaraan lain, ia adalah nilai yang disimpan dalam tika dan menunjuk terus ke tika ini.

Tetapi sebagai penunjuk yang berasingan, menunjuk ke lokasi berbeza dalam keadaan berbeza, itulah sebabnya kami mengelirukannya.

Mari kita lihat rupa bentuknya dalam keadaan berbeza

1. Apabila dalam skop global:

Ini paling baik difahami, iaitu, dalam skop global, ini menghala ke tetingkap, iaitu, dalam skop global, ini dan tetingkap adalah setara:

console.log(this === window); //true

Selain itu, memandangkan ini bersamaan dengan tetingkap pada masa ini, pembolehubah yang kami isytiharkan dalam skop global juga akan menunjukkan perkara ini:

var x = 1;
console.log(this.x);//1
console.log(window.x);//1

Sudah tentu, kami mempunyai cara lain untuk mengisytiharkan pembolehubah:

x = 0;
function setNum(){
x = 1;
};
console.log(this.x);//0
setNum();
console.log(this.x);//1

Apabila mengisytiharkan pembolehubah tanpa menggunakan var atau let, ia bersamaan dengan menambah atau menukar nilai atribut global this

Nampaknya sangat mudah, bukankah ia hanya objek yang setara dengan tetingkap?

Sudah tentu, jika itu sahaja, ini mungkin tidak perlu wujud.

Bahagian yang paling menyusahkan ini ialah ia mempunyai bentuk yang sama sekali berbeza dalam skop yang berbeza

2. Apabila dalam fungsi:

Pada masa kami tiba di sini, perangkap ini telah beransur-ansur terbongkar

Mengapa dikatakan di sini bahawa ia berada dalam fungsi dan bukannya dalam skop tempatan Untuk bercakap tentang perkara ini, kita mesti terlebih dahulu memahami apa itu fungsi

Dalam javascript, fungsi ialah objek khas dalam js: function, yang mempunyai bentuk yang berbeza

Apa yang biasa kita lihat:

function set(){
  var x = 0;
};

Dalam bentuk ini, dalaman ini adalah sama dengan skop global, menghala terus ke tetingkap, jadi bentuknya masih bersamaan dengan tetingkap.

var x = 0;
function num(){
  this.x = 1;
}
console.log(this.x);//0
num();
console.log(this.x);//1

Selalunya mudah untuk membuat kesilapan di sini Ramai orang berfikir bahawa apabila ini sudah ada dalam fungsi, lokasi semasanya ialah skop tempatan semasa, jadi ia sepatutnya menunjuk ke fungsi ini

Walau bagaimanapun, jika anda menjadikan fungsi ini (baharu), fungsi ini akan menjana persekitaran yang serba baharu, dan ini dalam keadaan ini juga akan berubah dengan sewajarnya, dan ia akan menunjukkan kepada contoh di mana ia berada.

num = "0";
function setThis(){
  this.num = "1";
}
console.log(this.num);//"0"
new setThis();
console.log(this.num);//"0"
console.log(new setThis().num);//1


Ini kerana, selepas instantiasi, fungsi ini menjadi objek contoh, dan ini di dalamnya secara semula jadi menghala ke objek contoh ini, sama seperti ini pada permulaan menunjuk ke objek tetingkap, ia menunjukkan di mana ia berada daripada

Selain itu, apabila kita menulis javascript, kita biasanya mempunyai cara untuk memanggil fungsi, iaitu untuk mengikat acara kepada elemen, seperti butang.addEventListener('klik', fn, false), dsb., jika diperlukan dalam fn Jika ini digunakan, maka ini menunjukkan kepada elemen pemprosesan acara, iaitu butang

Nota: ini ialah kata kunci, anda tidak boleh menimpanya.

Secara tidak sedar, saya telah menulis lebih baik sebenarnya, ini mempunyai lebih banyak bentuk, seperti prototaip, seperti dalam HTML, seperti dalam pengendali acara DOM, Saya tidak akan teruskan di sini akan bercakap tentang ini
dalam prototaip

Pada pemahaman saya, ini adalah penunjuk, dan oleh itu ia akan mempunyai kedudukan yang lebih penting dalam rantaian prototaip, tetapi ia tidak dalam skop kami hari ini, jadi saya tidak akan menerangkannya terlalu banyak buat masa ini

Mulai sekarang, saya pada dasarnya akan mengemas kini setiap hari Isnin Sebagai seorang pemula dalam JavaScript, saya juga berharap apa yang saya tulis dapat dikongsi dengan lebih ramai orang, dan saya berharap dapat meringkaskan lebih banyak pengalaman daripada pemikiran semua orang!

Mengenai apa sebenarnya ini dalam JavaScript (1), saya akan mengemas kininya setiap hari Isnin Sebagai newbie dalam JavaScript, saya berharap apa yang saya tulis dapat dikongsi dengan rakan-rakan di sekeliling saya, dan saya berharap dapat bertukar pengalaman pembelajaran dengan setiap orang. lain. Terima kasih!

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