Rumah > hujung hadapan web > tutorial js > kata kunci ini dalam javascript

kata kunci ini dalam javascript

Mary-Kate Olsen
Lepaskan: 2025-01-12 14:40:42
asal
193 orang telah melayarinya

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()
Salin selepas log masuk
Salin selepas log masuk

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()
Salin selepas log masuk
Salin selepas log masuk

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()
})()

Salin selepas log masuk
Salin selepas log masuk

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
Salin selepas log masuk
Salin selepas log masuk

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
Salin selepas log masuk
function bar() {
    console.log(this)
}
const obj = {
    name: "javascript",
    bar
}
const a = obj.bar
a() // this will be global object
Salin selepas log masuk

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()
Salin selepas log masuk
Salin selepas log masuk

mohon

"use strict"
function bar() {
    console.log(this) // undefined
}
bar()
Salin selepas log masuk
Salin selepas log masuk

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()
})()

Salin selepas log masuk
Salin selepas log masuk

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
Salin selepas log masuk
Salin selepas log masuk

Atas ialah kandungan terperinci kata kunci ini dalam javascript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan