javascript如何获取父类构造函数参数
我现在在这个问题上陷入了困境,我怎样才能得到父类构造函数的参数呢?我想得到狮子的DNA,然后把它传给小狮子并使用它。请注意,这实际上不是我个人使用的,而是一个包/模块,因此我无法在代码中输入我输入的内容 示例代码:javascript如何获取父类构造函数参数,javascript,node.js,class,Javascript,Node.js,Class,我现在在这个问题上陷入了困境,我怎样才能得到父类构造函数的参数呢?我想得到狮子的DNA,然后把它传给小狮子并使用它。请注意,这实际上不是我个人使用的,而是一个包/模块,因此我无法在代码中输入我输入的内容 示例代码: class Lion { constructor(client, DNA = {}) { this.sharp = howsharp; this.client = client; } } class BabyLion exten
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)
-显然不起作用,因为我正在更改事先声明的狮子的DNAsuper(client,{something})
- 拥有一个空变量
,然后执行让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