ES6 javascript子类没有继承所有变量?

ES6 javascript子类没有继承所有变量?,javascript,inheritance,ecmascript-6,es6-class,Javascript,Inheritance,Ecmascript 6,Es6 Class,所以基本上我有一个ES6JS类,在这个类中创建构造函数变量,然后在类方法中赋值。稍后,我创建了一个子类,它扩展了第一个类,并将我希望使用的所有变量传递给子类构造函数,然后传递给super方法。在这一个变量正确且另一个变量未定义之后,将以相同的方式创建、传递和记录这两个变量。为什么它没有定义 class socket { constructor() { this.socket = {}; this.base = '/*string*/'; this.mainIndex;

所以基本上我有一个ES6JS类,在这个类中创建构造函数变量,然后在类方法中赋值。稍后,我创建了一个子类,它扩展了第一个类,并将我希望使用的所有变量传递给子类构造函数,然后传递给super方法。在这一个变量正确且另一个变量未定义之后,将以相同的方式创建、传递和记录这两个变量。为什么它没有定义

class socket {
  constructor() {
    this.socket = {};
    this.base = '/*string*/';
    this.mainIndex;
    this.dashboard;
    this.user_id;
  }

  socket_start() {

    //do stuff here to start websocket

    self.socket.onmessage = function ( event ) {
      let stream = JSON.parse( event.data );
      this.mainIndex = stream.url.mainIndex; 
      this.dashboard = stream.url.dashboard; 
      this.user_id = stream.staffInfo.id; 
      this.base = stream.base;  

      console.log( this.user_id ); // "1"
      console.log( this.base); // "string"
    }
  }
}


class main extends socket {
  constructor( user_id, base, socket, mainIndex, dashboard ) {
  super( user_id, base, socket, mainIndex, dashboard );


  console.log( this.user_id ); // undefined   <--????
  console.log( this.base); // "string"
}
类套接字{
构造函数(){
this.socket={};
this.base='/*字符串*/';
这是一个指数;
这个仪表盘;
这个用户id;
}
socket_start(){
//在这里做一些事情来启动websocket
self.socket.onmessage=函数(事件){
让stream=JSON.parse(event.data);
this.maindex=stream.url.maindex;
this.dashboard=stream.url.dashboard;
this.user_id=stream.staffInfo.id;
this.base=stream.base;
console.log(this.user_id);/“1”
console.log(this.base);/“字符串”
}
}
}
类main扩展套接字{
构造函数(用户id、基本、套接字、主索引、仪表板){
超级(用户id、基本、套接字、主索引、仪表板);

console.log(this.user_id);//未定义您的父类将忽略它传递的任何参数。请比较以下两个版本:

class A {
  constructor() {
    this.name;
  }
}

class B extends A {
  constructor(name) {
    super(name)
  }
}

> new B("Hunter");
B {}
下面是一个具有正确行为的示例:

class A {
  constructor(name) {
    this.name = name;
  }
}

class B extends A {
  constructor(name) {
    super(name)
  }
}

> new B("Hunter");
B { name: 'Hunter' }

你的父类构造函数忽略了它传递的所有参数。你能详细说明一下吗?当然,我在下面发布了一个示例作为答案。你的父类构造函数只通过赋值创建
.socket
.base
属性。所有其他属性都是在以后的
onmessage
回调中创建的。那么为什么你要这样做呢传递的其他变量在我的示例中起作用,除了1?您在
socket
构造函数中显式设置了
base
的值,因此它在subclass
main
中将
定义为this.user\u id=0;
在socket类中-然后在方法中更改它?它将使
0
所有我。您真正想要的是接受子类在调用
super
时传递给父类的用户id。我唯一关心的是,我只在类的方法中更改变量,而不是在创建实例时更改变量,例如
let x=new main()