Методы класса, объявленные таким образом, лежат в прототипе (каждый такой метод будет общий для всех экземпляров). Они созданы и существуют ещё до того, как будут созданы экземпляры класса. Соответсвенно, this внутри них не может сам по себе указывать на экземпляр, только если не задать его явно - при вызове через точку, через квадратные скобки, или с помощью call/apply/bind.
Можно объявить методы как стрелочные функции - это современный подход.
class ClassCounter extends React.Component {
...
  increment = () => {
    console.log(this);
    this.setState({ count: this.state.count + 1 });
  };
что практически то же самое, как если бы ты прямо в конструкторе написал
class ClassCounter extends React.Component {
  constructor(props) {
    super(props);
    this.increment = () => {
      console.log(this);
      this.setState({ count: this.state.count + 1 });
    };
  }
то есть такие методы создаются в момент создания экземпляра (на каждый экземпляр заново создается каждый стрелочный метод), ну и автоматически биндят this по правилам стрелочных функций, то есть this с места вызова - внутри конструктора