Saya menemukan nilai tak terduga dari kata kunci ini dalam contoh berikut:
let x = {
z : 10 ,
get func1() {
return function(v) {
console.log(this === v);
}
}
}
x.func1(x)
Nilai kata kunci ini adalah objek x seolah-olah dieksekusi dari objek itu, saya berharap hanya fungsi get yang memiliki kata kunci ini sama dengan objek panggilan x
contoh ini menunjukkan kepada kita perbedaannya
let x = {
func2() {
return function(v) {
console.log(this === v);
}
}
}
x.func2()(x);
Dalam kedua contoh func1 yang merupakan fungsi pengambil, dan func2 yang merupakan metode objek, dieksekusi dari objek x , dan fungsi yang dikembalikan kemudian dieksekusi. Jadi mengapa nilai ini dalam contoh pertama tidak sama dengan objek global, bukan objek x .
javascript
getter-setter
Kirollos Nasr
sumber
sumber
x.func1()
.Jawaban:
Itu pertanyaan yang sangat menarik.
Itu karena fungsi dipanggil segera pada hasil dari akses properti. Jadi ini secara fundamental setara:
Dalam kedua kasus:
Fakta bahwa itu
func1
adalah properti accessor danfunc2
properti data tidak masalah. Begitulah nilai yang dihasilkan dari membaca properti digunakan yang penting.sumber
x.func1
itu menyimpan referensix
sebagai konteks untuk panggilan berikutnya, berbeda denganx.func2()
(dari pertanyaan Anda) yang mengevaluasi fungsi juga tetapi bukan ekspresi akses anggota.x.func2()(x);
?x.func1(x)
danx.func2()(x)