¿Por qué la propiedad del objeto js no puede usar esto para llamar a otra propiedad?

Este problema parece ser cometido por muchas personas, pero todavía no sé lo suficiente sobre esto

Grabemos este problema ahora.

   obj = {
        a: 123,
        b: this.a,
        c: function () {
            return this.a;
        }
    };
   console.log(obj.b); // undefined
   console.log(obj.c()); // 123

En pocas palabras, este es un problema de alcance b. El esto en el atributo en realidad apunta al alcance principal, aquí está la ventana, y no definimos la variable a en la ventana. El esto en el atributo c apunta a obj, que es Porque el objeto en sí mismo no puede crear un ámbito, pero las funciones (métodos) pueden crear un ámbito local.

1. A continuación, primero agregamos a a la ventana, los resultados son los siguientes

  var a = 5
    obj = {
        a: 123,
        b: this.a,
        c: function () {
            return this.a;
        }
    };
   console.log(obj.b); // 5
   console.log(obj.c()); // 123

2. Si realmente desea obtener a en b, utilice la misma escritura que c


   obj = {
        a: 123,
        b: function () {
            return this.a;
        },
        c: function () {
            return this.a;
        }
    };
   console.log(obj.b()); // 123
   console.log(obj.c()); // 123

3. A continuación, intentaremos cambiar el esto de b por obj


    obj = {
        a: 123,
        b: obj.a,
    };
   console.log(obj.b);

Efectivamente, se informó un error.

4.  Luego cambiamos el this de c a obj 


   obj = {
        a: 123,
        c: function () {
            return obj.a;
        }
    };
   console.log(obj.c()); // 123

Como era de esperar, se puede generar normalmente. 

5. Finalmente, usamos la función de flecha para escribir el método. Se sabe que la función de flecha sin la suya propia heredará el alcance padre, que es window

   obj = {
        a: 123,
        c: ()=>{
            return this.a
        }
    };
    console.log(obj.c()); // undefined

resumen:

1. El objeto en el entorno global es el mismo que la función en el entorno global, esto apunta a la ventana

2. Cuando se llama como un método de objeto, apunta al objeto que llamó al método

3. La función de flecha no tiene su propio esto, sigue siendo equivalente a un objeto global, y todavía apunta a la ventana

Supongo que te gusta

Origin blog.csdn.net/a1059526327/article/details/108358928
Recomendado
Clasificación