cari
Rumahhujung hadapan webtutorial jskata kunci ini dalam javascript

this keyword in javascript

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!

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
Ganti aksara rentetan dalam javascriptGanti aksara rentetan dalam javascriptMar 11, 2025 am 12:07 AM

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 Persediaan API Carian Google CustomTutorial Persediaan API Carian Google CustomMar 04, 2025 am 01:06 AM

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

Contoh warna json failContoh warna json failMar 03, 2025 am 12:35 AM

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

Bina Aplikasi Web Ajax anda sendiriBina Aplikasi Web Ajax anda sendiriMar 09, 2025 am 12:11 AM

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

10 JQuery Syntax Highlighters10 JQuery Syntax HighlightersMar 02, 2025 am 12:32 AM

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

10 JavaScript & JQuery MVC Tutorial10 JavaScript & JQuery MVC TutorialMar 02, 2025 am 01:16 AM

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

8 plugin susun atur halaman jquery yang menakjubkan8 plugin susun atur halaman jquery yang menakjubkanMar 06, 2025 am 12:48 AM

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

Apa itu ' ini ' Dalam JavaScript?Apa itu ' ini ' Dalam JavaScript?Mar 04, 2025 am 01:15 AM

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

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Pelayar Peperiksaan Selamat

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

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual