retour au cours

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