Rumah  >  Artikel  >  hujung hadapan web  >  Mengapa Penunjuk \"ini\" Menuding ke Objek Global dalam Fungsi JavaScript Bersarang?

Mengapa Penunjuk \"ini\" Menuding ke Objek Global dalam Fungsi JavaScript Bersarang?

Susan Sarandon
Susan Sarandonasal
2024-10-19 06:48:30535semak imbas

Why Does the

Misteri Penunjuk "ini" JavaScript dalam Fungsi Bersarang

Dalam coretan kod JavaScript, anda telah menemui tingkah laku yang tidak dijangka mengenai "ini " penunjuk dalam fungsi bersarang. Walaupun mentakrifkan fungsi bersarang dalam kaedah objek, penunjuk "ini" di dalam fungsi bersarang menghala ke objek "tetingkap" global.

Kelakuan penuding "ini" ditentukan oleh kaedah seruan fungsi dalam JavaScript. Terdapat tiga kaedah utama:

  1. Invokasi Langsung: someThing.someFunction(arg1, arg2, argN)

    • Dalam kaedah ini, penunjuk "ini" merujuk kepada objek yang menggunakan fungsi, dalam kes ini, someThing.
  2. Function Call with call(): someFunction.call(someThing, arg1, arg2, argN)

    • Fungsi call() secara eksplisit menetapkan penunjuk "ini" kepada objek yang disediakan, dalam kes ini, someThing.
  3. Fungsi Panggilan dengan apply() : someFunction.apply(someThing, [arg1, arg2, argN])

    • Serupa dengan call(), fungsi apply() menetapkan penunjuk "ini" kepada objek yang disediakan, tetapi ia memerlukan tatasusunan argumen sebaliknya.

Dalam contoh yang anda berikan, fungsi bersarang digunakan tanpa sebarang kaedah penyeruan fungsi eksplisit. Akibatnya, penunjuk "ini" menjadi lalai kepada objek global, yang biasanya merupakan objek "tetingkap" dalam persekitaran penyemak imbas.

Untuk menentukan gelagat penunjuk "ini" secara eksplisit, anda boleh menggunakan pengubahsuaian berikut :

  1. Gunakan std_obj.displayMe() dan bukannya std_obj.displayMe; untuk memanggil kaedah displayMe secara eksplisit.
  2. Tentukan fungsi bersarang dengan penunjuk ini objek secara eksplisit: var doSomeEffects = function() { var that = this; ... }
  3. Gunakan fungsi call() atau apply() untuk menetapkan penunjuk "ini": doSomeEffects.call(std_obj);

Dengan menggunakan mana-mana kaedah ini , anda boleh mengawal kelakuan penunjuk "ini" dalam fungsi bersarang dan memastikan ia merujuk kepada objek yang diingini.

Atas ialah kandungan terperinci Mengapa Penunjuk \"ini\" Menuding ke Objek Global dalam Fungsi JavaScript Bersarang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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