Encontré un valor inesperado de esta palabra clave en el siguiente ejemplo:
let x = {
    z : 10 ,
    get func1() {
        return function(v) {
            console.log(this === v);
        }
    }
}
x.func1(x)
El valor de esta palabra clave es el objeto x como si se ejecutara desde ese objeto, espero que solo la función get que tiene esta palabra clave sea igual al objeto llamante x
este ejemplo nos muestra la diferencia
let x = {
    func2() {
        return function(v) {
            console.log(this === v);
        }
    }
}
x.func2()(x);
En ambos ejemplos, func1, que es la función getter, y func2, que es un método del objeto, se ejecutan desde el objeto x , y luego se ejecuta la función devuelta. Entonces, ¿por qué este valor en el primer ejemplo no es igual al objeto global en lugar del objeto x ?
                    
                        javascript
                                getter-setter
                                
                    
                    
                        Kirollos Nasr
fuente
                
                fuente

x.func1().Respuestas:
Esa es una pregunta muy interesante.
Esto se debe a que la función se llama inmediatamente en el resultado de un acceso a la propiedad. Entonces estos son fundamentalmente equivalentes:
En ambos casos:
El hecho de que
func1sea una propiedad de acceso yfunc2una propiedad de datos no importa. Lo importante es cómo se usa el valor resultante de leer la propiedad.fuente
x.func1mantiene la referenciaxcomo contexto para la llamada posterior, en contraste conx.func2()(de su pregunta) que también se evalúa como una función pero no es una expresión de acceso de miembro.x.func2()(x);?x.func1(x)yx.func2()(x)