Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimanakah Anda Boleh Mendapatkan Nama Fungsi dalam JavaScript?

Bagaimanakah Anda Boleh Mendapatkan Nama Fungsi dalam JavaScript?

DDD
DDDasal
2024-10-26 05:42:03435semak imbas

How Can You Retrieve a Function's Name in JavaScript?

Mengakses Nama Fungsi Dalam Skopnya

Keupayaan untuk mendapatkan semula nama fungsi dari dalam fungsi itu sendiri ialah teknik yang berguna dalam JavaScript. Walau bagaimanapun, ini boleh mencabar kerana nama fungsi tidak tersedia apabila mengaksesnya dari dalam.

Penyelesaian ES6:

Dalam ES6, mengakses nama fungsi adalah mudah:

<code class="javascript">const getFunctionName = () => myFunction.name;</code>

Penyelesaian ES5:

Untuk ES5, pendekatan berikut disyorkan:

<code class="javascript">function getFunctionName(func) {
  const funcStr = func.toString();
  const name = funcStr.substring('function '.length, funcStr.indexOf('('));
  return name;
}</code>

Menggunakan Function.caller ( Tidak Disyorkan):

Function.caller menyediakan penyelesaian bukan standard untuk mengakses nama pemanggil. Walau bagaimanapun, ia harus dielakkan kerana kemungkinan isu keserasian dan penamatannya dalam mod ketat.

Penyelesaian Berasaskan Regex:

Satu lagi pendekatan ES5 yang cekap melibatkan penggunaan ungkapan biasa :

<code class="javascript">const getFunctionName = (func) => /function\s+([a-zA-Z$][a-zA-Z$0-9]+)/.exec(func.toString())[1];</code>

Contoh:

Mari kita gunakan coretan kod yang disediakan sebagai contoh:

<code class="javascript">var ns.parent = function() {
  // at this point, i want to know who the child is that called the parent
  // ie
  console.log(getFunctionName(this));
}

var obj = new ns.parent.child();</code>

Ini akan mengeluarkan: "newFunc" kerana newFunc ialah fungsi yang memanggil fungsi induk.

Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Mendapatkan Nama Fungsi dalam JavaScript?. 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