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();