javascript-tutorial / javascript-tutorial/en.javascript.info

Proxy and Reflect Article — Arrow Functions or `this` in Class constructor

Ouverte
#2,904 0 commentaires 1 réaction 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
HTML
Étoiles
25.5k
Forks
4k
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

Source: https://javascript.info/proxy
Date Accessed: 1 March 2022

A serious limitation in ES6 Proxy is the inability to proxy internal use of the this context inside a class. In the password example, if we use a class, then the differences in behaviour from using an arrow function vs a method is clear:


class User {

  name = "John";
  _password = "***";

  checkPassword(value: string) {
    return value === this._password;
  }

  checkPassword2 = (value: string) => {
    return value === this._password;
  }
};

const user = new Proxy(new User(), {

  get(target: any, prop: string) {

    if (prop.startsWith('_')) {
      throw new Error("Access denied");
    }
    let value = target[prop];

    // Commenting out the workaround
    return value; // (typeof value === 'function') ? value.bind(target) : value; // (*)
  },
});

console.log(user.checkPassword2('***')); // Arrow function works without the workaround because `this` is the internal context
console.log(user.checkPassword('***')); // Method fails with `Access denied` as expected

The point here is that if your class passes this somewhere in the constructor then that this cannot be proxied. This is a significant limitation of Proxy and should probably be mentioned in the article.

A good write up BTW.

Thanks

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par l’article sur Proxy à l’adresse https://javascript.info/proxy et examinez l’exemple du mot de passe ainsi que le comportement signalé des classes et des arrow functions. Mettez à jour l’article pour expliquer la limitation liée à l’utilisation interne de this et à l’accès via Proxy ; le travail est terminé lorsque la distinction et le contexte de la solution de contournement sont documentés avec précision.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
javascript
Domaine
documentation
Type d'issue
Documentation
Difficulté
2/5
Temps estimé
1-3 heures
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
45/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.