Bagaimana untuk Mengendalikan Rujukan \'ini\' dalam Fungsi Panggilan Balik dalam Kaedah Prototaip Objek dalam JavaScript?

Mary-Kate Olsen
Lepaskan: 2024-10-18 15:02:03
asal
779 orang telah melayarinya

How to Handle \

Referencing "this" in Interval/Timeout Functions within Object Prototype Methods

In JavaScript, referencing "this" within nested functions can be tricky, especially when working with object prototype methods. Consider the following code snippet:

<code class="javascript">function Foo() {}
Foo.prototype = {
    bar: function () {
        this.baz();
    },
    baz: function () {
        this.draw();
        requestAnimFrame(this.baz);
    }
};</code>
Salin selepas log masuk

This code will result in an error when calling bar() because this refers to the global object within the baz function. To resolve this issue, you can utilize several techniques:

1. Anonymous Function Wrapper

Wrap the baz call within an anonymous function, passing the correct this value:

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

2. Fat Arrow Function Wrapper

In JavaScript implementations with arrow function support:

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

3. Binding Function

Use a function like Function.prototype.bind to bind this:

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

By employing these techniques, you can ensure that this references the correct object within interval or timeout functions, ensuring consistent and functional prototype method behavior.

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Rujukan \'ini\' dalam Fungsi Panggilan Balik dalam Kaedah Prototaip Objek 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