Comment lier des méthodes lors de la déstructuration d’un object en JavaScript?
const person = { getName: function() { console.log(this); } }; var a = person.getName; var b = person.getName.bind(person); var {getName: c} = person; person.getName(); //=> {getName: [Function]} a(); //=> window or global b(); //=> {getName: [Function]} c(); //=> window or global
Je veux que c
connecte à la console son object “parent” {getName: [Function]}
.
Existe-t-il un moyen de lier toutes les méthodes lors de la déstructuration d’un object dans une ligne de déstructuration ?
Non, il n’y a pas moyen. Les fonctions détachées d’objects perdent le contexte d’origine. Et détruire en JavaScript n’a pas de syntaxe pour faire quelque chose avec les valeurs extraites à la volée.
Vous pouvez utiliser un getter ou un proxy pour lier une méthode chaque fois que vous l’ get
, même en utilisant la déstructuration.
Dans les deux solutions, vérifiez si la méthode est déjà liée, en recherchant celle-ci au début du nom à l’aide de Ssortingng.startsWith()
. Si elle n’est pas liée, cette méthode sera liée avant de la renvoyer.
const person = { prop: 5, _getName: function() { console.log(this.prop); }, get getName() { // if not bound, bind the method if(!this._getName.name.startsWith('bound ')) { this._getName = this._getName.bind(this); } return this._getName; } }; var a = person.getName; var b = person.getName.bind(person); var {getName: c} = person; person.getName(); //=> 5 a(); //=> 5 b(); //=> 5 c(); //=> 5