Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用属性重写进行Javascript静态类继承的正确方法是什么?_Javascript_Inheritance_Static - Fatal编程技术网

使用属性重写进行Javascript静态类继承的正确方法是什么?

使用属性重写进行Javascript静态类继承的正确方法是什么?,javascript,inheritance,static,Javascript,Inheritance,Static,我发现了很多关于类继承的帖子,但没有提到更改静态类属性的具体问题 问题是:我试图在一个静态类上实现JavaScript上的类继承,这个静态类将有一些通用的静态方法,并将通过子类(静态)进行扩展。子类可能会添加更多的静态方法,并会更改配置对象。它们都不会被实例化,因此我假设无法在构造函数上创建body属性,因为它不会被调用。我有下面的代码,但我认为这可能不是正确的方法 你能推荐一个更好的选择吗 类动物{ 静态get body(){ 返回{ 腿:空, 负责人:1, } } 静态getLegs(){

我发现了很多关于类继承的帖子,但没有提到更改静态类属性的具体问题

问题是:我试图在一个静态类上实现JavaScript上的类继承,这个静态类将有一些通用的静态方法,并将通过子类(静态)进行扩展。子类可能会添加更多的静态方法,并会更改配置对象。它们都不会被实例化,因此我假设无法在构造函数上创建
body
属性,因为它不会被调用。我有下面的代码,但我认为这可能不是正确的方法

你能推荐一个更好的选择吗

类动物{
静态get body(){
返回{
腿:空,
负责人:1,
}
}
静态getLegs(){
把这个。身体。腿还给我;
}
静态getHead(){
返回此.body.head;
}
}
蚂蚁类动物{
静态get body(){
返回{
腿:6,
负责人:1,
}
}
}
怪兽类动物{
静态get body(){
返回{
腿:4,
负责人:2,
}
}
}
log(Animal.getLegs(),Animal.getHead());
log(Ant.getLegs(),Ant.getHead());

log(Monster.getLegs(),Monster.getHead())
用于以更方便的方式创建继承原型的对象。实际上JS有原型继承(对象有原型),所以我们可以使用它:

 const animal = {
   body: { // you can fall back to a getter at any time
      legs: null,
      head: 1,
  },
  get legs(){
    return this.body.legs;
  },
  get head(){
    return this.body.head;
  }
};

const ant = Object.assign(Object.create(animal), {
  body: {
     legs: 6,
     head: 1,
  },
});
如果您需要该类用于其他用途,仍然可以设置属性:

 class Animal{
    static get legs(){
       return this.body.legs;
    }
    static get head(){
        return this.body.head;
    }
 }

Animal.body = { legs: null, head: 1, };

class
es用于以更方便的方式创建继承原型的对象。实际上JS有原型继承(对象有原型),所以我们可以使用它:

 const animal = {
   body: { // you can fall back to a getter at any time
      legs: null,
      head: 1,
  },
  get legs(){
    return this.body.legs;
  },
  get head(){
    return this.body.head;
  }
};

const ant = Object.assign(Object.create(animal), {
  body: {
     legs: 6,
     head: 1,
  },
});
如果您需要该类用于其他用途,仍然可以设置属性:

 class Animal{
    static get legs(){
       return this.body.legs;
    }
    static get head(){
        return this.body.head;
    }
 }

Animal.body = { legs: null, head: 1, };

如果不想在每次获取
body
时创建新对象,可以将每个类的对象放入一个变量并返回该变量。或者,您可以使用
映射
使代码更干净,该映射返回在
处索引的对象,只允许一个
获取正文
定义:

const{动物、蚂蚁、怪物}=(()=>{
类动物{
静态get body(){
返回尸体。获取(此)
}
静态getLegs(){
把这个。身体。腿还给我;
}
静态getHead(){
返回此.body.head;
}
}
类Ant扩展了动物{}
类怪物扩展动物{}
const body=新地图([
[动物{
腿:空,
总人数:1
}],
[蚂蚁{
腿:6,
总人数:1
}],
[怪物{
腿:4,
总人数:2
}]
]);
返回{动物、蚂蚁、怪物};
})();
log(Animal.getLegs(),Animal.getHead());
log(Ant.getLegs(),Ant.getHead());

log(Monster.getLegs(),Monster.getHead())
如果您不想在每次获取
body
时创建新对象,可以将每个类的对象放入一个变量中并返回该变量。或者,您可以使用
映射
使代码更干净,该映射返回在
处索引的对象,只允许一个
获取正文
定义:

const{动物、蚂蚁、怪物}=(()=>{
类动物{
静态get body(){
返回尸体。获取(此)
}
静态getLegs(){
把这个。身体。腿还给我;
}
静态getHead(){
返回此.body.head;
}
}
类Ant扩展了动物{}
类怪物扩展动物{}
const body=新地图([
[动物{
腿:空,
总人数:1
}],
[蚂蚁{
腿:6,
总人数:1
}],
[怪物{
腿:4,
总人数:2
}]
]);
返回{动物、蚂蚁、怪物};
})();
log(Animal.getLegs(),Animal.getHead());
log(Ant.getLegs(),Ant.getHead());

log(Monster.getLegs(),Monster.getHead())我不确定这个问题,但是如果您使用的是Babel,您可以编写类似的代码

类动物{
静态主体={
腿:空,
负责人:1,
};
静态getLegs(){
把这个。身体。腿还给我;
}
静态getHead(){
返回此.body.head;
}
}
蚂蚁类动物{
静态主体={
腿:6,
总人数:1
};
}
怪兽类动物{
静态主体={
腿:4,
负责人:2,
}
}
log(Animal.getLegs(),Animal.getHead());
log(Ant.getLegs(),Ant.getHead());

log(Monster.getLegs(),Monster.getHead())我不确定这个问题,但是如果您使用的是Babel,您可以编写类似的代码

类动物{
静态主体={
腿:空,
负责人:1,
};
静态getLegs(){
把这个。身体。腿还给我;
}
静态getHead(){
返回此.body.head;
}
}
蚂蚁类动物{
静态主体={
腿:6,
总人数:1
};
}
怪兽类动物{
静态主体={
腿:4,
负责人:2,
}
}
log(Animal.getLegs(),Animal.getHead());
log(Ant.getLegs(),Ant.getHead());

log(Monster.getLegs(),Monster.getHead())代码正在运行,您的子类函数正在成功跟踪父类函数。我不确定您希望在这里改进什么?@CertainPerformance每次我尝试获取尸体时返回一个新对象的性能看起来不是很好。我想知道是否有一种方法可以在构造之外使用变量或属性。代码正在运行,您的子类函数正在成功地隐藏父类函数。我不确定您希望在这里改进什么?@CertainPerformance每次我尝试获取尸体时返回一个新对象的性能看起来不是很好。我想知道是否有一种方法可以在构造之外使用变量或属性。可以用类语法编写吗?@vandervals是的,就是这样