ES6 (terinspirasi oleh jawaban sendy halim di bawah):
myFunction.name
Penjelasan tentang MDN . Pada 2015 bekerja di nodejs dan semua browser utama kecuali IE.
Catatan: Pada fungsi terikat ini akan menghasilkan " bound <originalName>". Anda harus menghapus "terikat" jika Anda ingin mendapatkan nama aslinya.
ES5 (terinspirasi oleh jawaban Vlad):
Jika Anda memiliki referensi ke fungsi, Anda dapat melakukan:
function functionName( func )
{
// Match:
// - ^ the beginning of the string
// - function the word 'function'
// - \s+ at least some white space
// - ([\w\$]+) capture one or more valid JavaScript identifier characters
// - \s* optionally followed by white space (in theory there won't be any here,
// so if performance is an issue this can be omitted[1]
// - \( followed by an opening brace
//
var result = /^function\s+([\w\$]+)\s*\(/.exec( func.toString() )
return result ? result[ 1 ] : '' // for an anonymous function there won't be a match
}
- Saya belum menjalankan pengujian unit tentang hal ini, atau perbedaan implementasi yang terverifikasi, tetapi pada prinsipnya itu harus bekerja, jika tidak memberikan komentar.
- Catatan: tidak akan berfungsi pada fungsi terikat
- Catatan: itu
callerdan calleedianggap sudah usang.
[1] Saya memasukkannya di sini karena legal dan sering kali alat penyorotan sintaksis gagal memperhitungkan ruang putih antara nama fungsi dan tanda kurung. Di sisi lain, saya tidak mengetahui implementasi .toString () yang akan menyertakan ruang putih di sini, jadi itu sebabnya Anda bisa menghilangkannya.
Sebagai jawaban untuk pertanyaan awal, saya akan meninggalkan warisan parasit dan mencari beberapa pola desain OOP yang lebih tradisional. Saya menulis TidBits.OoJs untuk menulis kode OOP dalam JavaScript dengan nyaman dengan fitur yang meniru C ++ (belum lengkap, tetapi kebanyakan).
Saya melihat dari komentar bahwa Anda ingin menghindari menyampaikan informasi parentkepada konstruktornya. Saya harus mengakui bahwa pola desain tradisional tidak akan menyelamatkan Anda dari yang itu, karena umumnya dianggap hal yang baik untuk membuat ketergantungan Anda jelas dan ditegakkan.
Saya juga menyarankan untuk menjauhi fungsi anonim. Mereka hanya membuat debug dan membuat profil PITA karena semuanya hanya muncul sebagai "fungsi anonim", dan tidak ada manfaatnya bagi mereka yang saya sadari.