Ajouter la décoration "defer()" aux fonctions
importance: 4
Ajoutez au prototype de toutes les fonctions la méthode defer(ms)
, qui renvoie un wrapper, retardant l’appel de ms
millisecondes.
Voici un exemple de la façon dont cela devrait fonctionner :
function f(a, b) {
alert( a + b );
}
f.defer(1000)(1, 2); // montre 3 après 1 seconde
Veuillez noter que les arguments doivent être passés à la fonction d’origine.
Function.prototype.defer = function(ms) {
let f = this;
return function(...args) {
setTimeout(() => f.apply(this, args), ms);
}
};
// vérification
function f(a, b) {
alert( a + b );
}
f.defer(1000)(1, 2); // montre 3 après 1 seconde
Notez que nous utilisons this
dans f.apply
pour que notre décoration fonctionne pour les méthodes d’objets.
Ainsi, si la fonction wrapper est appelée en tant que méthode d’objet, alors this
est passé à la méthode originale f
.
Function.prototype.defer = function(ms) {
let f = this;
return function(...args) {
setTimeout(() => f.apply(this, args), ms);
}
};
let user = {
name: "John",
sayHi() {
alert(this.name);
}
}
user.sayHi = user.sayHi.defer(1000);
user.sayHi();