Salah satu kata kunci yang paling keliru dalam JavaScript ialah kata kunci ini. Ia ialah kata kunci pengecam khas yang ditakrifkan secara automatik dalam skop setiap fungsi, tetapi apa sebenarnya yang dirujuk untuk mengelirukan walaupun pembangun JavaScript yang berpengalaman.
Kata kunci ini merujuk kepada konteks di mana sekeping kod, seperti badan fungsi, sepatutnya dijalankan. Lazimnya, ia digunakan dalam kaedah objek, di mana ini merujuk kepada objek yang dilampirkan kaedah, sekali gus membenarkan kaedah yang sama digunakan semula pada objek yang berbeza.
Nilai ini boleh dikenal pasti di mana fungsi dilaksanakan bukan di mana fungsi diisytiharkan
Kami akan memeriksa peraturan yang berbeza untuk mengenal pasti ini dalam javascript
Pengikatan lalai
Peraturan lalai kami akan menggunakan kes panggilan fungsi yang paling biasa: pelaksanaan fungsi kendiri. Fikirkan peraturan ini sebagai peraturan catch-all lalai apabila tiada peraturan lain digunakan.
Dalam fungsi kendiri panggil nilai ini akan menjadi globalObject (dalam pelayar env ia adalah objek tetingkap, dalam nod env ia akan menjadi global)
function bar() { console.log(this) // this will be global object (window) } bar()
Tetapi......
nilai ini boleh berbeza cara kod berjalan dalam mod ketat atau mod tidak ketat
Jika Apabila fungsi digunakan sebagai fungsi kendiri, ini biasanya merujuk kepada objek global dalam mod tidak ketat dan tidak ditentukan dalam mod ketat
"use strict" function bar() { console.log(this) // undefined } bar()
Halus tetapi penting, objek global hanya layak untuk pengikatan lalai jika kandungan bar() tidak berjalan dalam mod ketat;
function bar() { console.log(this) // global object (window) } (function() { "use strict" bar() })()
Ikatan tersirat
Apabila fungsi biasa digunakan sebagai kaedah objek (obj.method()), ini menghala ke objek itu.
function bar() { console.log(this) } const obj = { name: "javascript", foo } obj.foo() // this here is object owing the function
Mula-mula, perhatikan cara bar() diisytiharkan dan kemudian ditambahkan sebagai sifat rujukan pada obj. Tidak kira sama ada foo() pada mulanya diisytiharkan pada obj, atau ditambah sebagai rujukan kemudian (seperti yang ditunjukkan oleh coretan ini), dalam kedua-dua kes fungsi itu tidak benar-benar "dimiliki" atau "terkandung" oleh objek obj.
Hilang tersirat:
Apabila menggunakan panggil balik, fungsi terikat secara tersirat kehilangan pengikatan itu, yang biasanya bermakna ia kembali kepada pengikatan lalai, sama ada objek global atau tidak ditentukan, bergantung pada mod ketat.
function bar() { setTimeout(function() { console.log(this) // this will be global object }, 1000); } const obj = { name: "javascript", bar } obj.bar() // this will be global object
function bar() { console.log(this) } const obj = { name: "javascript", bar } const a = obj.bar a() // this will be global object
Pengikatan eksplisit
Dengan pengikatan tersirat seperti yang baru kita lihat, kami terpaksa memutasi objek yang dipersoalkan untuk menyertakan rujukan pada dirinya sendiri kepada fungsi tersebut dan menggunakan rujukan fungsi sifat ini untuk mengikat ini secara tidak langsung (secara tersirat) pada objek.
Tetapi, bagaimana jika anda mahu memaksa panggilan fungsi untuk menggunakan objek tertentu untuk pengikatan ini, tanpa meletakkan rujukan fungsi sifat pada objek?
Ya mungkin, javascript menyediakan banyak kaedah seperti .map, .filter untuk tatasusunan kami mempunyai beberapa kaedah dalam fungsi. Ini berlaku , panggil dan ikat
Berikut ialah sintaks untuk kaedah ini
panggil
function bar() { console.log(this) // this will be global object (window) } bar()
mohon
"use strict" function bar() { console.log(this) // undefined } bar()
Perbezaan halus antara memohon dan memanggil. Sintaks adalah sama tetapi kami menghantar argumen sebagai tatasusunan dalam kaedah penggunaan
function bar() { console.log(this) // global object (window) } (function() { "use strict" bar() })()
Memanggil bar dengan pengikatan eksplisit oleh bar.call(..) membolehkan kami memaksa ini menjadi obj.
Pengikatan baru
Apabila fungsi digunakan sebagai pembina (dengan kata kunci baharu), ia terikat pada objek baharu yang sedang dibina, tidak kira objek mana fungsi pembina diakses. Nilai ini menjadi nilai ungkapan baharu melainkan pembina mengembalikan nilai bukan primitif yang lain.
function bar() { console.log(this) } const obj = { name: "javascript", foo } obj.foo() // this here is object owing the function
Atas ialah kandungan terperinci kata kunci ini dalam javascript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Penjelasan terperinci mengenai kaedah penggantian rentetan javascript dan Soalan Lazim Artikel ini akan meneroka dua cara untuk menggantikan watak rentetan dalam JavaScript: Kod JavaScript dalaman dan HTML dalaman untuk laman web. Ganti rentetan di dalam kod JavaScript Cara yang paling langsung ialah menggunakan kaedah pengganti (): str = str.replace ("cari", "ganti"); Kaedah ini hanya menggantikan perlawanan pertama. Untuk menggantikan semua perlawanan, gunakan ungkapan biasa dan tambahkan bendera global g: str = str.replace (/fi

Tutorial ini menunjukkan kepada anda bagaimana untuk mengintegrasikan API carian Google tersuai ke dalam blog atau laman web anda, menawarkan pengalaman carian yang lebih halus daripada fungsi carian tema WordPress standard. Ia menghairankan mudah! Anda akan dapat menyekat carian ke y

Siri artikel ini ditulis semula pada pertengahan 2017 dengan maklumat terkini dan contoh segar. Dalam contoh JSON ini, kita akan melihat bagaimana kita dapat menyimpan nilai mudah dalam fail menggunakan format JSON. Menggunakan notasi pasangan nilai utama, kami boleh menyimpan apa-apa jenis

Jadi di sini anda, bersedia untuk mempelajari semua perkara ini yang dipanggil Ajax. Tetapi, apa sebenarnya? Istilah Ajax merujuk kepada kumpulan teknologi longgar yang digunakan untuk membuat kandungan web yang dinamik dan interaktif. Istilah Ajax, yang asalnya dicipta oleh Jesse J

Tingkatkan Penyampaian Kod Anda: 10 Penyeret Sintaks untuk Pemaju Coretan kod perkongsian di laman web atau blog anda adalah amalan biasa bagi pemaju. Memilih penyapu sintaks yang betul dapat meningkatkan daya tarikan dan daya tarikan visual dengan ketara. T

Artikel ini membentangkan pemilihan lebih daripada 10 tutorial mengenai rangka kerja javascript dan jquery model-view-controller (MVC), sesuai untuk meningkatkan kemahiran pembangunan web anda pada tahun baru. Tutorial ini merangkumi pelbagai topik, dari Foundatio

Leverage JQuery untuk Layouts Laman Web yang mudah: 8 Plugin Essential JQuery memudahkan susun atur laman web dengan ketara. Artikel ini menyoroti lapan plugin jQuery yang kuat yang menyelaraskan proses, terutamanya berguna untuk penciptaan laman web manual

Mata teras Ini dalam JavaScript biasanya merujuk kepada objek yang "memiliki" kaedah, tetapi ia bergantung kepada bagaimana fungsi dipanggil. Apabila tidak ada objek semasa, ini merujuk kepada objek global. Dalam penyemak imbas web, ia diwakili oleh tetingkap. Apabila memanggil fungsi, ini mengekalkan objek global; tetapi apabila memanggil pembina objek atau mana -mana kaedahnya, ini merujuk kepada contoh objek. Anda boleh mengubah konteks ini menggunakan kaedah seperti panggilan (), memohon (), dan mengikat (). Kaedah ini memanggil fungsi menggunakan nilai dan parameter yang diberikan. JavaScript adalah bahasa pengaturcaraan yang sangat baik. Beberapa tahun yang lalu, ayat ini


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual
