"suiveur" et "arguments" sont limités propriétés de la fonction et ne sont pas accessibles dans ce contexte
Je suis en train de créer une correction simple fonction qui indique à l'appelant d'une fonction, comme ceci:
function xe() {
console.log(xe.caller().name)
}
Avec cela, je voudrais juste être en mesure d'ajouter xe()
à une fonction et il va enregistrer les appels à la fonction– seulement un court, plus simple, pour faciliter le débogage. Débogage de sucre, pour ainsi dire.
Malheureusement, je reçois le message d'erreur de la part du sujet-ligne:
TypeError: 'appelant" et "arguments" sont limités propriétés de la fonction et ne sont pas accessibles dans ce contexte.
Je suis à l'aide de Babel/ES6, qui injecte "use strict"
en haut de chaque module. Cette peut être la cause, mais la recherche a donné des informations limitées sur les raisons de l'erreur est relevée, et j'aimerais mieux le comprendre.
Si le mode strict est le problème, je préfère ne pas désactiver le mode strict pour l'ensemble du projet– juste pour le module de la fonction/.
- Vous voulez vraiment appeler votre
.caller
? - Voir aussi Comment obtenir de l'appelant en mode strict? et Comment trouvez-vous l'appelant de la fonction en JavaScript?
'use strict'
au haut de chaque module, en fait
Vous devez vous connecter pour publier un commentaire.
Il en est la cause. De MDN:
Si vous êtes en train de faire ES6, vous ne pouvez pas dans le cas général désactiver le mode strict. Elle est implicite lors de certaines conditions comme quand dans l'ES6 module.
Si vous êtes juste de débogage, je vous suggère de simplement en utilisant un point de rupture dans un débogueur et de la vérification du cadre de pile, mais je suis sûr que vous le savez déjà.
Si vous êtes juste à la sortie des informations de débogage, vous pourriez aussi, je suppose qu'il suffit de lire la pile d'une Erreur de l'objet:
Vous pouvez globalement désactiver (mais je me rends compte que ce n'est pas ce que vous voulez)
use strict
avec babel en Utilisant soit:ou
Si vous devez bande sur un module de niveau, je pense que vous aurez à faire vous-même. Chaîne de base de remplacer peut-être?
En outre, comme cela a été souligné dans l'ES5. Il devrait être
xe.caller.name
et pasxe.caller().name
ou vous re-appeler la fonction.Comme par cette de la documentation. Le
Function.caller()
propriété renvoie la fonction qui a appelé la fonction spécifiée. Tout simplement, vous obtiendrez toute l'appelant de la fonction lorsque vous utilisezxe.caller
. De nouveau l'exécution de l'appelant la fonction. Ici, vous faites la récursivité et c'est la raison pour laquelle il n'est pas en permettant en mode strict.Vous pouvez exécuter votre exemple de fonction dans le navigateur de la console. vous obtiendrez
Maximum call stack size exceeded
erreur.