Saya pikir ini akan menjadi sesuatu yang bisa saya lakukan dengan mudah di google, tapi mungkin saya tidak mengajukan pertanyaan yang tepat ...
Bagaimana cara mengatur apa pun yang dimaksud "ini" dalam fungsi javascript yang diberikan?
misalnya, suka dengan sebagian besar fungsi jQuery seperti:
$(selector).each(function() {
//$(this) gives me access to whatever selector we're on
});
Bagaimana cara saya menulis / memanggil fungsi mandiri saya sendiri yang memiliki referensi "ini" yang sesuai saat dipanggil? Saya menggunakan jQuery, jadi jika ada cara khusus jQuery untuk melakukannya, itu akan ideal.
javascript
jquery
scope
this
pengguna126715
sumber
sumber
$.proxy
Jawaban:
Javascript
.call()
dan.apply()
metode memungkinkan Anda untuk mengatur konteks untuk suatu fungsi.Sekarang Anda dapat menelepon:
Yang akan mengingatkan
FOO
. Sebaliknya, lewatobj_b
akan waspadaBAR!!
. Perbedaan antara.call()
dan.apply()
adalah yang.call()
membutuhkan daftar yang dipisahkan koma jika Anda meneruskan argumen ke fungsi Anda dan.apply()
membutuhkan array.Oleh karena itu, Anda dapat dengan mudah menulis fungsi
hook
dengan menggunakanapply()
metode ini. Sebagai contoh, kami ingin menambahkan fitur ke.css()
metode jQuerys . Kita dapat menyimpan referensi fungsi asli, menimpa fungsi dengan kode khusus dan memanggil fungsi yang tersimpan.Karena
arguments
objek ajaib adalah objek mirip array, kita bisa meneruskannyaapply()
. Dengan begitu kami menjamin, bahwa semua parameter dilewatkan ke fungsi asli.sumber
obj_a
, misalnya, Anda dapat membuat salinannya denganvar boud_myfunc = myfunc.bind(obj_a)
dan cukup meneleponbound_myfunc()
sesuai kebutuhan.Gunakan
function.call
:Di mana
that
objek yang Anda inginkanthis
dalam fungsi menjadi.sumber
function
adalah kata kunci yang dipesan; pertimbangkan untuk memperbarui respons Anda untuk menyertakan fungsi yang dinamai karenafunction.call(...)
tidak JavaScript yang valid.jQuery menggunakan
.call(...)
metode untuk menetapkan node saat ini kethis
dalam fungsi yang Anda berikan sebagai parameter.EDIT:
Jangan takut untuk melihat ke dalam kode jQuery ketika Anda ragu, semuanya dalam Javascript yang jelas dan terdokumentasi dengan baik.
yaitu: jawaban untuk pertanyaan ini adalah sekitar baris 574,
callback.call( object[ name ], name, object[ name ] ) === false
sumber
Anda dapat menggunakan fungsi bind untuk mengatur konteks
this
dalam suatu fungsi.sumber
Contoh dasar lain:
TIDAK bekerja:
Kerja:
Jadi pada dasarnya: cukup tambahkan .bind (ini) ke fungsi Anda
sumber