Pages

this et map and Co

Perte du this

var Sum10 = {
  prop: 10,
  addPropTo: function(array) {
    return array.map(function(elt) {
      return this.prop + elt;
    });
  }
};
           
console.log(Sum10.addPropTo([5,10,15]));
Le code ne marche pas !

Plus surprenant est d'exécuter le code suivant

window.prop = 10;




Don't worry : il y a perte du this. Problème classique que l'appel à la fonction bind peut résoudre facilement.

var Sum10 = {
  prop: 10,
  addPropTo: function(array) {
    return array.map(function(elt) {
      return this.prop + elt;
    }.bind(this));
  }
};
                     

console.log(Sum10.addPropTo([5,10,15]));

et puisque ce problème est classique en JS. Il suffit d'appeler les fonctions de type map avec un argument supplémentaire : this.

var Sum10 = {
  prop: 10,
  addPropTo: function(array) {
    return array.map(function(elt) {
      return this.prop + elt;
    },this);
  }
};
                     


console.log(Sum10.addPropTo([6,11,15]));



En action