JS Class fields potentially harmful

Python (a stretched example not 1:1 comparison, just to show developers intent on definition)

class A:
  value = 'a'
  common = 'ok'
  def __init__(self):
    print(self.value)
    print(self.common)

class B(A):
  value = 'b'

B()
# b
# ok

PHP (also a stretched comparison to show developers intents)

<?php
class A {
  public $value = 'a';
  public $common = 'ok';
  public function __construct() {
    echo $this->value . "\n";
    echo $this->common . "\n";
  }
}

class B extends A {
  public $value = 'b';
}

new B;
// b
// ok
?>

JavaScript

class A {
  value = 'a';
  common = 'ok';
  constructor() {
    console.log(this.value);
    console.log(this.common);
  }
}

class B extends A {
  value = 'b';
}

new B;
// a
// ok (not really)

Somebody mentioned in Python value that way ends up in the prototype ... and maybe in PHP it's the same, don't focus on implementations details though, focus on developers intents in classes definitions.

If nothing to add, in JS own properties rule over prototype properties, which adds extra surprise to me class fields are going out like this!

The paradox here, is that even writing this code there's no escape to the current result, because the prototype gets overwritten in class A through its fields, just to add confusion to developers (in this case).

class A {
  value = 'a';
  common = 'ok';
  constructor() {
    console.log(this.value);
    console.log(this.common);
  }
}

class B extends A {
  value = 'b';
}

B.prototype.value = 'b';

new B;
// a
// ok (still ...)