setTimeout dan "ini" dalam JavaScript
Apabila menggunakan fungsi setTimeout dalam JavaScript, adalah penting untuk memahami cara kata kunci ini berfungsi dalam fungsi panggil balik. Dalam sesetengah kes, anda mungkin menghadapi ralat yang menyatakan bahawa kaedah yang dirujuk tidak ditentukan selepas kelewatan tamat masa.
Pertimbangkan kod berikut:
<code class="javascript">test.prototype.method = function() { // method2 returns image based on the id passed this.method2('useSomeElement').src = "http://www.some.url"; timeDelay = window.setTimeout(this.method, 5000); }; test.prototype.method2 = function(name) { for (var i = 0; i < document.images.length; i++) { if (document.images[i].id.indexOf(name) > 1) { return document.images[i]; } } };</code>
Dalam contoh ini, fungsi kaedah dipanggil dengan tamat masa 5000 milisaat. Walau bagaimanapun, selepas tamat masa, fungsi method2 tidak lagi boleh diakses dalam fungsi panggil balik. Ini kerana kata kunci ini merujuk kepada objek global dan bukannya contoh prototaip ujian.
Untuk menyelesaikan isu ini, anda boleh mengikat kata kunci ini pada fungsi panggil balik sebelum memanggil setTimeout. Ini boleh dicapai dengan menggunakan kaedah .bind(this):
<code class="javascript">test.prototype.method = function() { // method2 returns image based on the id passed this.method2('useSomeElement').src = "http://www.some.url"; timeDelay = window.setTimeout(this.method.bind(this), 5000); };</code>
Dengan mengikat kata kunci ini pada fungsi panggil balik, anda memastikan bahawa fungsi method2 kekal boleh diakses walaupun selepas tamat masa telah berlalu.
Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Kata Kunci \'ini\' dengan Betul dalam Javascript's setTimeout Callback?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!