Я обнаружил неожиданное значение этого ключевого слова в следующем примере:
let x = {
z : 10 ,
get func1() {
return function(v) {
console.log(this === v);
}
}
}
x.func1(x)
Значением этого ключевого слова является объект x, как если бы он выполнялся из этого объекта, я ожидаю, что только функция get с этим ключевым словом равна вызывающему объекту x
этот пример показывает нам разницу
let x = {
func2() {
return function(v) {
console.log(this === v);
}
}
}
x.func2()(x);
В обоих примерах func1, который является функцией getter, и func2, который является методом объекта, выполняются из объекта x , а затем выполняется возвращенная функция. Так почему же это значение в первом примере не равно глобальному объекту вместо объекта x .
javascript
getter-setter
Кироллос Наср
источник
источник
x.func1()
.Ответы:
Это очень интересный вопрос.
Это потому, что функция вызывается сразу после получения доступа к свойству. Так что это в основном эквивалентно:
В обоих случаях:
Факт, что
func1
это свойство доступа иfunc2
является свойством данных, не имеет значения. Важно то, как используется значение, полученное в результате чтения свойства.источник
x.func1
он сохраняет ссылку вx
качестве контекста для последующего вызова, в отличие отx.func2()
(из вашего вопроса), который также оценивает функцию, но не является выражением доступа к члену.x.func2()(x);
?x.func1(x)
иx.func2()(x)