Rumah > hujung hadapan web > tutorial js > Bagaimanakah Saya Boleh Mengekalkan Konteks \'ini\' dalam Kaedah Prototaip Apabila Menggunakan setTimeout/setInterval dalam JavaScript?

Bagaimanakah Saya Boleh Mengekalkan Konteks \'ini\' dalam Kaedah Prototaip Apabila Menggunakan setTimeout/setInterval dalam JavaScript?

Mary-Kate Olsen
Lepaskan: 2024-10-18 15:02:30
asal
613 orang telah melayarinya

How Can I Preserve \

Preserving "this" Context in Prototype Methods with setTimeout/setInterval

In Javascript, accessing "this" within a prototype method can become tricky when using setTimeouts or intervals. Unlike in Python, Javascript methods lose their context when passed externally. To overcome this challenge, we explore various solutions.

Anonymous Function Wrapper

The most straightforward approach is to wrap the method call in an anonymous function:

<code class="javascript">var that = this;
setInterval(function(){
    return that.baz();
}, 1000);</code>
Salin selepas log masuk

This ensures that the method call and access to "this" occur simultaneously, preserving the correct context.

Fat Arrow Function Wrapper (ES6)

For implementations supporting fat arrow functions:

<code class="javascript">setInterval( () =&gt; this.baz(), 1000 );</code>
Salin selepas log masuk

This concise syntax preserves the context from the surrounding function.

Function Binding

Finally, consider using a binding function like Function.prototype.bind:

<code class="javascript">setInterval( this.baz.bind(this), 1000 );</code>
Salin selepas log masuk

Alternatively, libraries like Dojo provide methods like "hitch" for context binding.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengekalkan Konteks \'ini\' dalam Kaedah Prototaip Apabila Menggunakan setTimeout/setInterval dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
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