1.类
在javascript语言中,生成实例对象使用构造函数;ES6提供了类Class这个概念,作为对象的模板。定义一个类通过class关键字,ES6的类可以看成是构造函数的另一种写法。
1.如何定义一个类
//使用关键字class声明
class Person{
//constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。
//一个类必须有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加。
constructor(name,age){
this.name=name;
this.age=age
}
sayName(){ // 公共方法 定义在类体的方法称为实例方法,其实是存在于Person.prototype中,可供所有的实例调用。
console.log(this.name)
}
//通过static关键字来定义静态属性和静态方法,由类去调用。
static personAttr = "静态属性";
// 静态方法 由static 声明的方法就是静态方法
static personMethod() {}
}
2.继承
class可以通过extends关键字实现继承,子类可以没有构造器,系统会默认分配。子类提供了构造函数则必须要显式调用super。super函数类似于借用构造函数。类似于Animal.call()
1.子类对象指向父类对象
2.子类原型对象继承父类原型对象
class Animal{
constructor(name,age,weight){
this.name=name;
this.age=age;
this.weight=weight;
}
// 实例方法
sayName(){
console.log('实例方法')
}
// 静态属性
static animalAttr='Animal的静态属性';
// 静态方法
static animalmethod(){
console.log('Animal静态方法')
}
}
// 要实现继承
class Dog extends Animal{
constructor(name,age,weight,color){
super(name,age,weight);//
this.color=color;
console.log('Dog的构造器')
}
}
let dog=new Dog('豆豆',1,10,'golden');
dog.sayName();//豆豆
console.log(Dog.animalAttr);// Animal的静态属性
console.log(Dog.__proto__===Animal);//true 子类的__proto__属性,表示构造函数的继承,总是指向父类。
console.log(Dog.prototype.__proto__===Animal.prototype)//true 子类prototype属性的__proto__属性,表示方法的继承,总是指向父类的prototype属性。