繁体   English   中英

javascript如何获取父类构造函数参数

[英]javascript how to get parent class constructor parameters

我现在很困惑,如何获得父类构造函数的参数? 我想得到狮子的DNA,然后把它传给小狮子并使用它。 请注意,这并不是真的供我个人使用,而是一个包/模块,因此我无法输入我在代码中输入的内容。

示例代码:

class Lion {
    constructor(client, DNA = {}) {
        this.sharp = howsharp;   
        this.client = client;
    }
}

class BabyLion extends Lion {
    constructor(client) {
        super(client, How can I get DNA??);
    }
}

我尝试过的事情:

  • super(client)super(client, {somestuff}) - 显然不起作用,因为我正在super(client, {somestuff})事先声明的 Lion 的 DNA。
  • 有一个空变量let dna然后做dna = DNA然后导出它 - “显然”不起作用。

您没有“获取父级的参数”,您需要在覆盖的构造函数中定义所有必要的参数,然后将它们传递给super()

class BabyLion extends Lion {
  constructor(client, DNA) {
    super(client, DNA);
  }
}

您可以向BabyLionconstructor添加更多或更少的参数,但是您孩子的构造函数需要以某种方式获取并将所有必需的参数传递给父级的构造函数。 例如:

class BabyLion extends Lion {
  constructor(client) {
    super(client, 'foo');
  }
}

class BabyLion extends Lion {
  constructor(client, DNA, bar, baz) {
    super(client, DNA);
    this.bar = bar;
    this.baz = baz;
  }
}
class Lion {
 constructor(sharp, client) {
  this.sharp = sharp
  this.client = client;
 }

 getSharp(){
  return this.sharp;
 }
}

class BabyLion extends Lion {
 constructor(sharp, client) { // Here you can use more BabyLion parameters 
  super(sharp, client);
 }
}

a = new BabyLion(1, 2)
a.getSharp(); // returns ==> 1. This way it gets other attribures from Lion class

如果这有帮助。

 class Lion { constructor(client, DNA = {}) { this.sharp = 'howsharp'; this.client = client; this.dna = DNA; } } class BabyLion extends Lion { constructor(client) { super(client); } printDna() { console.log(this.dna); } } var baby = new BabyLion('hoper'); baby.printDna();

目前还不清楚你想做什么。 但是如果你想模仿父母 -> 孩子继承,那么这样的事情可以工作:

 const mix = (dna1, dna2) => Object.keys(dna1).reduce( (strand, key) => Object.assign(strand, {[key]: Math.random() < .5 ? dna1[key] : dna2[key] }), {} ) class Lion { constructor(name, DNA = {}) { this.name = name this.DNA = DNA; } mate(partner, name) { return new Lion(name, mix(this.DNA, partner.DNA)) } } const father = new Lion('Mufasa', {foo: 1, bar: 2, baz: 3, qux: 4}) const mother = new Lion('Surabi', {foo: 5, bar: 6, baz: 7, qux: 8}) const child = mother.mate(father, 'Simba') console.log(child)

这不使用软件中使用的继承。 (小狮子仍然只是另一只狮子。)但是小狮子确实(随机)从每个父母那里继承了它的基因。

而且我假设这与您实际想要的几乎没有关系。 但是,如果这只是一个虚拟示例,请注意不要过于字面地考虑继承。 现实世界的继承和编程概念之间存在真正的区别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM