Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.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_Node.js_Class - Fatal编程技术网

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

javascript如何获取父类构造函数参数,javascript,node.js,class,Javascript,Node.js,Class,我现在在这个问题上陷入了困境,我怎样才能得到父类构造函数的参数呢?我想得到狮子的DNA,然后把它传给小狮子并使用它。请注意,这实际上不是我个人使用的,而是一个包/模块,因此我无法在代码中输入我输入的内容 示例代码: class Lion { constructor(client, DNA = {}) { this.sharp = howsharp; this.client = client; } } class BabyLion exten

我现在在这个问题上陷入了困境,我怎样才能得到父类构造函数的参数呢?我想得到狮子的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,{something})
    -显然不起作用,因为我正在更改事先声明的狮子的DNA
  • 拥有一个空变量
    让dna
    ,然后执行
    dna=dna
    ,然后将其导出-“显然”不起作用
如果没有“获取父参数”,则需要在重写的构造函数中定义所有必要的参数,然后将这些参数传递给
super()

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

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狮子{
构造函数(客户端,DNA={}){
this.sharp='howsharp';
this.client=client;
这个。dna=dna;
}
}
BabyLion类{
建造商(客户){
超级(客户);
}
printDna(){
console.log(this.dna);
}
}
var baby=新婴儿(“hoper”);

宝贝,打印DNA()很不清楚你想做什么。但是,如果您想模仿父->子继承,那么类似的方法可能会奏效:

const mix=(dna1,dna2)=>Object.keys(dna1).reduce(
(串,键)=>Object.assign(串,{[key]:Math.random()<.5
?dna1[钥匙]
:dna2[键]
}), {}
)
班狮{
构造函数(名称,DNA={}){
this.name=name
这个。DNA=DNA;
}
配偶(合伙人、姓名){
返回新狮子(名称,混合(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=母亲.配偶(父亲,“辛巴”)

log(child)
这个问题没有真正意义;调用
super()
时,您可以传递
DNA
或不传递它。有意义的(并且符合实际情况)是在
Lion
上有一种方法来制作一个新的
BabyLion
。换句话说,您必须有一个
Lion
实例。但是我想传递用户在声明Lion类时指定的DNA。您混淆了类的声明和
Lion
实例的实例化。您还可以将
BabyLion
构造函数的一个参数作为父
Lion
实例。@dorintufar如果
BabyLion
未声明
DNA
参数,则不可访问。它从哪里来?事实上,您可以通过以下方式访问
DNA
(使用您的实现):在
Lion
类中将
DNA
设置为class属性,然后在
super
调用后访问后代类(
BabyLion
)中的属性
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