Javascript es6 super doesn't understand.
						
							
 I am a novice. Recently, I read the chapter of inheritance of  class  in teacher Ruan Yifeng"s  es6 . I don"t understand some concepts of  super . The details are as follows: 
 there is a code like this in teacher Ruan Yifeng"s blog: 
class A {
  constructor() {
    this.x = 1;
  }
}
class B extends A {
  constructor() {
    super();
    this.x = 2;
    super.x = 3;
    console.log(this.x); // 3
  }
}
let b = new B();
 that"s what teacher Ruan Yifeng said 
 because  this  points to the subclass instance, if you assign a value to an attribute through  super , then  super  is  this , and the assigned attribute becomes the property of the subclass instance. 
 in the above code,  super.x  is assigned  3 , which is equivalent to  3  assigned to  this.x .
 I don"t understand why using  super.x  to assign a value equates to  this.x , 
.
 my understanding is: 
 according to what teacher Ruan Yifeng said earlier 
 super  as an object, in a normal method, point to the prototype object of the parent class 
 so the  super.x = 3  here should actually be  A.prototype.x = 3 , so there should be no effect on the subclass  B , so the result should be  2  
, but the result from the browser is the same as that of teacher Ruan  3 , so how to understand 
 I hope I can have a clear answer from my seniors. Thank you. 
						 
												
					 
					
						
 the subject reads the book more carefully 
 in the second case, when super is an object, in a normal method, it points to the prototype object of the parent class; in a static method, it points to the parent class. 
 ES6 states that when a method of a parent class is called through super in a normal method of a subclass, the this inside the method points to the current instance of the subclass. 
 these two sentences are linked together and are not contradictory! It means: 
 means: 
 when calling the method of the parent class through super in the normal method of the subclass 
  super  points to the prototype object of the parent class, but the  this  in the method of the parent class points to the current subclass instance. 
super.x = 3;
 here  super  points to the parent class's prototype object, yes! 
 but the underlying layer does not execute 
 directly.
A.prototype.x = 3
 instead transforms the underlying  this , with a final effect similar to: 
this = 3
 Code validation: 
class A {
  constructor() {
    this.x = 1
  }
}
class B extends A {
  constructor() {
    super()
    this.x = 2
    Object.defineProperty(A.prototype, 'x', {
      set: function(val) {
        console.log(this, val)
         //B {x: 2} 3,superB {x: 2}this
      }
    })
    super.x = 3
    console.log(this.x) // 3
  }
}
let b = new B()
 if you look at the example of a function call given by teacher Ruan, this example is even clearer, because the function can use  call  
.
 
:
super.print() super.print.call(this)this
:
thissupersuperthis
supersuperthis
super super  thissuper 
super()prototypeclass super.x = 3 3thissuper.x
super() this, superthissupersuper 
322
:
 
 
 personal understanding is the same as the subject: super points to the prototype object of the parent class, so assigning values on super.x does not affect the this, pointing to the instance object, so it should still be 2, and the actual running result is also 2. 
 Why do some people get 2 and others get 3? it may be the reason for the es version, which needs to be studied carefully, and the gods who hope to understand will not hesitate to give us advice. 
  is only for personal understanding, for reference only. Teacher Ruan Yifeng said: 
 1,  when calling the method of the parent class through  super  in the common method of the subclass, the  this  inside the method points to the current instance of the subclass.  
 2. I understand that in super.x=3, it is not assigned directly, but the set function in the super object is called, in which the this is changed to point to the current instance. 
 3. Super does not have set/get, itself, but he inherits object's get/set method 
 
 because  this  points to the subclass instance, if you assign a value to an attribute through  super , then  super  is  this , and the assigned attribute becomes the property of the subclass instance. 
 in the above code,  super.x  is assigned  3 , which is equivalent to  3  assigned to  this.x .
class A {
  constructor() {
    this.x = 1;
  }
}
class B extends A {
  constructor() {
    super();
    this.x = 2;
    console.log(super.x)//  super.x=2 undefined
    super.x = 3;
    console.log(this.x); // 3
  }
}
let b = new B();
 I don't understand the concrete implementation of  super , but add a line of code according to this logic, and the result is obviously not valid. Weak doubt that this is not a counter-guess through the phenomenon, is it?