Javascript 如何设置属于基类[继承]的子类对象的属性(属性)?(将基本属性和属性传递给子级)

Javascript 如何设置属于基类[继承]的子类对象的属性(属性)?(将基本属性和属性传递给子级),javascript,class,oop,inheritance,ecmascript-6,Javascript,Class,Oop,Inheritance,Ecmascript 6,我对类和面向对象编程还不熟悉,在学习解释类和继承的教程时,我偶然发现了一些东西 如何将属于基类构造函数的值传递到子类中 例如,如果一个基本类 this.name=name this .age=age 子类继承基类 在基类中,有两个属性 this.childSchoool=school this.childfiends=friends 我可以使用super().func访问基类的函数 如果我将一个子类对象设置为 let childobj = new child("school_name", 6

我对类和面向对象编程还不熟悉,在学习解释类和继承的教程时,我偶然发现了一些东西

如何将属于基类构造函数的值传递到子类中

例如,如果一个基本类

this.name=name
this .age=age
子类继承基类

在基类中,有两个属性

this.childSchoool=school
this.childfiends=friends
我可以使用
super().func访问基类的函数

如果我将一个子类对象设置为

let childobj = new child("school_name", 6);
它将使用schoolname和age初始化子对象,但是


如何设置子类对象的
名称
年龄

类动物{
建造师(姓名){
this.name=名称;
}
setName=(name)=>this.name=name;
}
猫科动物{
建造师(姓名){
超级(姓名);
}
}
const myCat=新猫(“汤姆”);
console.log(myCat.name);//日志“汤姆”
myCat.setName('Silvester');
console.log(myCat.name);//日志“Silvester”
如何将属于基类构造函数的值传递到 儿童班

您可以通过调用
Base
constructor
来初始化从
Base
类继承的属性

类基{
建造师(姓名、年龄){
这个。_name=name;
这个。_年龄=年龄;
}
}
类子扩展基{
建造师(姓名、年龄、学名){
super(name,age);//初始化_name&_age属性
this.schoolname=学校名称;
}
获取名称(){
返回此。\u名称;
}
集合名称(名称){
这个。_name=name;
}
获得年龄(){
把这个还给我;
}
设定年龄(年龄){
这个。_年龄=年龄;
}
//学校名称的getter setter
}
const child=新子女(“foo”,42,“bar”);
console.log(child.name);
console.log(child.age);
child.name=“baz”

console.log(child.name)非常简单,如果您有一个从另一个(classA)继承的类(classB),那么在classB构造函数中,您将为classA构造函数引入参数并传递它们

这就是原因

class Base {
  constructor(name, age){
    this.name = name;
    this.age = age;
  }
}

class Child extends Base {
  constructor(name, age, school, friends){
    super(name, age); //pass along to the Base constructor
    this.school = school;
    this.friends = friends;
  }
}

let achild = new Child('ben', 4, 'School1', 99);
参数顺序很重要。但是,也可以使用命名参数:

let bchild = new Child(school='school2', age=9, name='chris', friends=22);
或者,您可以使用传递贴图或对象:

let amap = new Map([['name', 'sally'],['school', 'school1'],['age', 10],['friends', 9001]]);

let cchild = new Child(...amap);

你说“在基类中,有两个属性”。你是说儿童班吗?两个班都有两个。基地有名字,年龄。孩子有学校,朋友,但我该如何初始化它?我的意思是我们必须做var c=新孩子(姓名、年龄、学校、朋友)?参数的顺序是什么?这有关系吗?是的,参数顺序很重要。您还可以使用参数名,以允许您将它们按任何顺序排列。非常感谢!还有一些其他的答案建议使用函数来设置名称。这相当复杂。是否有一些特殊情况下我不能使用你讨论过的方法?添加和,这允许您使用更复杂的方法更新属性,例如,您可以添加验证,比如说18岁以上的人都不能是孩子,因此使用年龄设置器可以检查年龄是否超过18岁。此方法与下面的答案有什么区别?我不知道哪一个更好,但那些看起来很简单。使用它们有什么缺点吗?@Deshwal这是同一个概念,调用
super()
Base
类初始化道具。我刚刚在
子类中添加了一些getter和setter,你可以忽略它们。哦!对不起,我缺乏知识。这有点让人望而生畏。谢谢你在这里帮助我。我会把这些记在心里,这样我就可以尽可能快地学习和使用它们。如果我必须在我的孩子课堂上使用“name”,为什么还要这么麻烦呢。我的意思是我可以把另一个参数传递给基类。就这样?否?直接访问属性容易出错:如果该属性不存在,则只会将其创建为新属性,尽管它不在原始类中。