Donc, j'ai fait ce code pour m'aider à ajouter des fonctions après ou avant d'autres fonctions, mais je ne pouvais pas trouver une meilleure façon de le faire, je devais utiliser eval() et c'est vraiment pas une bonne pratique. Au début, j'ai essayé de faire quelque chose comme:Quelque chose d'orienté en Javascript
Function.prototype.append = function(fn){
eval("this = function(){ ("+this.toString()+").apply(this, arguments); fn.apply(this, arguments); }");
}
hello = function(){
console.log("hello world!");
}
hello(); // hello world!
hello.append(function(){
console.log("bye world!");
});
hello(); // hello world! bye world
mais cela n'a pas fonctionné puisque la fonction ne peut pas changer elle-même. Donc, je l'ai fait:
Aspects = new Object();
Aspects.append = function(aspect, fn){
eval(aspect + " = function(){ ("+eval(aspect + '.toString()')+").apply(this, arguments); fn.apply(this, arguments); }");
}
Aspects.prepend = function(aspect, fn){
eval(aspect + " = function(){ fn.apply(this, arguments); ("+eval(aspect + '.toString()')+").apply(this, arguments); }");
}
hello = function(){
console.log("hello world!");
}
hello(); // hello world!
Aspects.append('hello', function(){
console.log("bye world!");
});
hello(); // hello world! bye world!
je ne veux pas travailler avec des objets ou quoi que ce soit, je veux juste ajouter plus de code avant ou après ma fonction déjà déclaré
Notez également compter sur votre 'Function.prototype.toString' retourner quelque chose de sensé, il ne sera pas. – Raynos