D'être curieux, mais toujours pas à trouver la réponse à l'exécution sujet de la question ci-dessus, j'ai écrit ce résumé pour nodejs pour tester à la fois la performance et la fiabilité de tous présentés (et marqué) solutions.
J'ai comparé le mur le temps d'un clone de la fonction de la création et de l'exécution d'un clone.
Les résultats obtenus avec l'affirmation des erreurs sont inclus dans le résumé du commentaire.
De Plus mes deux cents (basé sur l'auteur de la suggestion):
clone0 cent (plus rapide mais plus laid):
Function.prototype.clone = function() {
var newfun;
eval('newfun=' + this.toString());
for (var key in this)
newfun[key] = this[key];
return newfun;
};
clone4 cent (plus lent mais pour ceux qui n'aiment pas la fonction eval() pour des raisons connues seulement pour eux et leurs ancêtres):
Function.prototype.clone = function() {
var newfun = new Function('return ' + this.toString())();
for (var key in this)
newfun[key] = this[key];
return newfun;
};
Comme pour les performances, si eval/nouvelle Fonction est plus lent que le wrapper solution (et cela dépend vraiment de la fonction de la taille du corps), il vous donne la nue fonction clone (et je veux dire le vrai clone simple mais avec des propriétés de partage de l'état), sans inutiles fuzz avec les propriétés cachées, des fonctions wrapper et des problèmes avec la pile.
De Plus, il existe toujours un facteur important que vous devez prendre en compte: - le moins de code, moins de place pour les erreurs.
L'inconvénient de l'utilisation de la fonction eval/Fonction nouvelle, c'est que le clone et l'original de la fonction opèrent dans des champs d'application différents. Il ne marche pas bien avec les fonctions qui sont à l'aide de portée des variables. Les solutions à l'aide de bind-comme d'emballage sont à la portée indépendante.