Saya memiliki pemahaman yang cukup bagus tentang Javascript, kecuali bahwa saya tidak dapat menemukan cara yang bagus untuk mengatur variabel "ini". Mempertimbangkan:
var myFunction = function(){
alert(this.foo_variable);
}
var someObj = document.body; //using body as example object
someObj.foo_variable = "hi"; //set foo_variable so it alerts
var old_fn = someObj.fn; //store old value
someObj.fn = myFunction; //bind to someObj so "this" keyword works
someObj.fn();
someObj.fn = old_fn; //restore old value
Apakah ada cara untuk melakukan ini tanpa 4 baris terakhir? Agak menyebalkan ... Saya sudah mencoba mengikat fungsi anonim, yang saya pikir cantik dan pintar, tetapi tidak berhasil:
var myFunction = function(){
alert(this.foo_variable);
}
var someObj = document.body; //using body as example object
someObj.foo_variable = "hi"; //set foo_variable so it alerts
someObj.(function(){ fn(); })(); //fail.
Jelas, mengirimkan variabel ke fungsi saya adalah sebuah pilihan ... tapi itu bukan poin dari pertanyaan ini.
Terima kasih.
javascript
variables
scope
this
Erik Philips
sumber
sumber
$.proxy(function, element)
sehingga kapan pun fungsi itu dipanggil, itu akan berada dalam konteks elemen. api.jquery.com/jquery.proxy.bind()
Saya pikir Anda sedang mencari
call
:Panggilan ini
myFunction
denganthis
diatur keobj
.Ada juga metode yang sedikit berbeda
apply
, yang mengambil parameter fungsi sebagai array:sumber
Jika Anda ingin 'menyimpan'
this
nilai ke suatu fungsi sehingga Anda dapat menyebutnya dengan mulus nanti (mis. Ketika Anda tidak memiliki akses ke nilai itu lagi), Anda bisabind
(tidak tersedia di semua browser):sumber
bind
tampaknya tersedia di IE9 +, FF4 +, Safari 5.1.4+ dan Chrome 7+ (sumber) . Anda juga dapat memanggil bind langsung pada fungsi anonim:var myFunction = function(){ /* this = something */ }.bind(something);
Pencarian saya tentang cara mengikat
this
membawa saya ke sini sehingga saya memposting temuan saya: Dalam 'ECMAScript 2015' kita juga dapat mengatur ini secara leksikal menggunakan fungsi panah.Lihat: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
Dari pada:
Sekarang kita dapat melakukan:
sumber
Pengaturan
this
kata kunci dalam javascript.Javascript memiliki 3 metode bawaan untuk mengatur
this
kata kunci dengan nyaman. Mereka semua terletak padaFunction.prototype
objek sehingga setiap fungsi dapat menggunakannya (karena setiap fungsi mewarisi dari prototipe ini melalui pewarisan prototypal). Fungsi-fungsi ini adalah sebagai berikut:Function.prototype.call()
: Fungsi ini mengambil objek yang ingin Anda gunakan sebagaithis
argumen pertama. Kemudian sisa argumen adalah masing-masing argumen dari fungsi yang disebut.Function.prototype.apply()
: Fungsi ini mengambil objek yang ingin Anda gunakan sebagaithis
argumen pertama. Kemudian argumen kedua adalah array yang berisi nilai-nilai argumen fungsi yang disebut (elemen pertama array adalah argumen pertama dari fungsi, argumen kedua array adalah argumen kedua fungsi dll).Function.prototype.bind()
: Fungsi ini mengembalikan fungsi baru yang memiliki nilai berbedathis
. Dibutuhkan objek yang ingin Anda tetapkan sebagaithis
nilai sebagai argumen pertama dan kemudian mengembalikan objek fungsi baru.Perbedaan antara panggilan / berlaku dan ikat:
call
danapply
serupa dalam kenyataan bahwa mereka langsung memanggil fungsi (dengan nilai yang telah ditentukanthis
)bind
berbeda daricall
danapply
pada kenyataannya bahwa fungsi ini mengembalikan fungsi baru dengan pengikatanthis
nilai yang berbeda.Contoh:
sumber