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
func1
sea una propiedad de acceso yfunc2
una propiedad de datos no importa. Lo importante es cómo se usa el valor resultante de leer la propiedad.fuente
x.func1
mantiene la referenciax
como 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)