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