Как указано в спецификации ECMAScript 5.1 , метод toString
возвращает строку с синтаксисом FunctionDeclaration :
Function.prototype.toString ()
Возвращается зависящее от реализации представление функции. Это представление имеет синтаксис FunctionDeclaration . В частности, обратите внимание, что использование и размещение пробелов, ограничителей строки и точек с запятой в представлении String зависит от реализации.
Функция toString
не является универсальной;он генерирует исключение TypeError , если его это значение не является объектом Function. Поэтому его нельзя передавать другим объектам для использования в качестве метода.
FunctionDeclaration имеет следующий синтаксис:
FunctionDeclaration :
function Идентификатор ( FormalParameterList opt ) { FunctionBody }
FormalParameterList :
Идентификатор
FormalParameterList , Идентификатор
И Идентификатор определяется как:
Идентификатор ::
Имя_идентификатора , но не ReservedWord
IdentifierName ::
IdentifierStart
IdentifierNameIdentifierPart
IdentifierStart ::
UnicodeLetter
$
_
\ UnicodeEscapeSequence
IdentifierPart ::
IdentifierStart
UnicodeCombiningMark
UnicodeDigit
UnicodeConnectorPunctuation
Заключение
Хотя это не прекрасный способ получить имя функции (но только в ES5), если вы выполните анализ всех перечисленных выше возможностей, он может безопасно работать в ES5.
Но стандарт ES6 изменил спецификации для .toString()
, что подразумевает больше возможных синтаксисов, сделав егонебезопасно использовать этот метод в нем.
Таким образом, используйте этот метод только в версиях до ES6.