Comment lier des méthodes lors de la déstructuration d’un object en JavaScript?

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.

  1. Lier automatiquement la méthode à l’object avec un getter. Cela nécessitera un getter pour chaque méthode.
 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