Свойство на расширенный класс, Геттер на расширение класса. Геттер никогда не называется - PullRequest
3 голосов
/ 08 июня 2019

Я работаю с новыми объявлениями открытых полей класса , доступными в Chrome 72 , и я столкнулся с действительно странным поведением:

class Extended {
  property = 5;
}

class Extending extends Extended {
  get property() {
    return false;
  }
}

const extending = new Extending();

console.log(extending.property);
//logs 5

Я быудивитесь, если это ожидаемый результат, поскольку он делает тер get в расширяющем классе недоступным.Это ошибка?

1 Ответ

2 голосов
/ 08 июня 2019

Получатель называется.Когда вы сначала вызываете extending.property, класс Extending будет проверяться на наличие свойства, если там ничего не будет найдено, он будет искать свойство в расширенном классе, а после того, как он будет найден, он запишет значение свойства.

давайте рассмотрим 2 других фрагмента кода:

1.

class Extended {

}

class Extending extends Extended {
  get property() {
    return false;
  }
}

const extending = new Extending();

console.log(extending.property);
//logs false

Этот код выведет на консоль false, поскольку свойство не может быть найдено ни в классе Extending, ни в классе Extended., тогда получатель вернет ложное утверждение.

2.

class Extended {
  property = 5;
}

class Extending extends Extended {
      property = 6;
      get property() {
        return false;
      }
    }

const extending = new Extending();

console.log(extending.property);
//logs 6

Это выведет 6 на консоль, так как свойство было найдено в классе Extending, оно не будет продолжать проверять егов расширенном классе

...