Heim  >  Artikel  >  Web-Frontend  >  Wie kann ich „diesen“ Kontext in Prototypmethoden beibehalten, wenn ich setTimeout/setInterval in JavaScript verwende?

Wie kann ich „diesen“ Kontext in Prototypmethoden beibehalten, wenn ich setTimeout/setInterval in JavaScript verwende?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-18 15:02:30595Durchsuche

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>

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>

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>

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

Das obige ist der detaillierte Inhalt vonWie kann ich „diesen“ Kontext in Prototypmethoden beibehalten, wenn ich setTimeout/setInterval in JavaScript verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn