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

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

Abierto
#2,904 0 comentarios 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
HTML
Estrellas
25.5k
Forks
4k
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

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

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con el artículo sobre Proxy en https://javascript.info/proxy y revisa el ejemplo de la contraseña junto con el comportamiento reportado de las clases y las arrow functions. Actualiza el artículo para explicar la limitación relacionada con el uso interno de this y el acceso mediante Proxy; se considera terminado cuando la distinción y el contexto de la solución alternativa estén documentados con precisión.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
javascript
Área
documentation
Tipo de issue
Documentación
Dificultad
2/5
Tiempo estimado
1-3 horas
Estado de actividad
Estancado
Claridad
Bien especificado
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.