ES6 (aşağıdaki sendy halim'in cevabından esinlenmiştir):
myFunction.name
MDN hakkında açıklama . 2015 yılı itibariyle nodejs ve IE dışındaki tüm önemli tarayıcılarda çalışmaktadır.
Not: Bağlı fonksiyonlarda bu " bound <originalName>
" verecektir . Eğer orijinal adı almak istiyorsanız "bağlı" soymak zorunda kalacak.
ES5 (Vlad'ın cevabından esinlenerek):
Eğer işleve referans varsa, şunları yapabilirsiniz:
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
}
- Bu konuda birim testleri yapmadım veya uygulama farklılıklarını doğruladım, ancak prensip olarak yorum bırakmazsa çalışmalıdır.
- Not: bağlı işlevler üzerinde çalışmaz
- Not: bu
caller
ve callee
kullanımdan kaldırılmış olarak kabul edilir.
[1] Buraya ekliyorum çünkü yasal ve genellikle yeterli sözdizimi vurgulama araçları işlev adı ve parantez arasındaki boşluğu hesaba katmıyor. Öte yandan, .toString () 'in burada beyaz boşluk içerecek herhangi bir uygulamasının farkında değilim, bu yüzden onu atlayabilirsiniz.
Orijinal soruya bir cevap olarak, parazitik kalıtım bırakacak ve daha geleneksel OOP tasarım kalıpları için gideceğim. Ben rahatça C ++ taklit bir özellik kümesi ile JavaScript'te OOP kodu yazmak için bir TidBits.OoJs yazdım (henüz tam değil, ama çoğunlukla).
Yorumlardan, bilgi parent
gereksinimlerini yapıcısına iletmekten kaçınmak istediğinizi görüyorum . Geleneksel tasarım modellerinin sizi bunlardan kurtaramayacağını itiraf etmeliyim, çünkü bağımlılıklarınızı açık ve güçlendirmek genellikle iyi bir şeydir.
Ayrıca anonim işlevlerden uzaklaşmayı da öneririm. Sadece hata ayıklama ve bir PITA profilleme yaparlar, çünkü her şey sadece "anonim işlev" olarak görünür ve farkında olduğum hiçbir faydası yoktur.