Encontrei um valor inesperado dessa palavra - chave no exemplo a seguir:
let x = {
z : 10 ,
get func1() {
return function(v) {
console.log(this === v);
}
}
}
x.func1(x)
O valor dessa palavra-chave é o objeto x como se fosse executado a partir desse objeto. Espero que apenas a função get que tenha essa palavra - chave seja igual ao objeto que chama x
este exemplo mostra a diferença
let x = {
func2() {
return function(v) {
console.log(this === v);
}
}
}
x.func2()(x);
Nos dois exemplos, func1, que é a função getter, e func2, que é um método do objeto, são executados a partir do objeto x , e a função retornada é executada. Então, por que esse valor no primeiro exemplo não é igual ao objeto global em vez do objeto x .
javascript
getter-setter
Kirollos Nasr
fonte
fonte
x.func1()
.Respostas:
Essa é uma pergunta muito interessante.
É porque a função está sendo chamada imediatamente no resultado de um acesso à propriedade. Portanto, estes são fundamentalmente equivalentes:
Em ambos os casos:
O fato de
func1
ser uma propriedade de acessador e defunc2
propriedade de dados não importa. É como é importante o valor resultante da leitura da propriedade.fonte
x.func1
mantém a referênciax
como o contexto da chamada subsequente, em contraste comx.func2()
(da sua pergunta) que avalia também uma função, mas não é uma expressão de acesso de membro.x.func2()(x);
?x.func1(x)
ex.func2()(x)