这里写目录标题
- 一、class 类的用法
- 二、类的继承
一、class 类的用法
JS语言中,生成实例对象的传统方法是通过构造函数:
function Person(name,age){this.name=name;this.age=age;}Person.prototype.sayName=function(){return this.name}let p=new Person('小马哥',18);console.log(p);//Person {name: '小马哥', age: 18}
ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。
基本上,ES6 的class可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。上面的代码用 ES6 的class改写,就是下面这样
class Person{// constructor方法 是类的默认方法,通过new命令生成对象实例时,自动调用该方法,一个类必须有constructor方法,如果没有定义,会被默认添加constructor(name, age) {this.name = name;this.age = age;}//等同于Person.prototype = function sayName(){}sayName(){return this.name;}}console.log(new Person('小马哥',18));
类的方法内部如果含有this,它默认指向类的实例.
二、类的继承
class Animal{// 实例化的时候会立即被调用constructor(name, age){this.name = name;this.age = age;}setName(){return this.name;}setAge(){return this.age;}}class Dog extends Animal{constructor(name, age, color){// 如果 子类 继承了 父类,且 子类 中写了构造器,则 子类 构造器的 super 必须要调用super(name, age); // 等同于 Animal.call(this,name,age); 继承父类的属性this.color = color;}// 子类自己的方法setColor(){return `${this.name}是${this.age}岁了,它的颜色是${this.color}`;}// 重写父类的方法setName(){// super 相同于 Animalreturn this.name + super.setAge() + this.color;}}let d1 = new Dog('小黄', 28, 'red');console.log(d1.setAge()); // 调用继承父类的方法console.log(d1.setColor()); // 调用子类自己的方法console.log(d1.setName()); // 调用重写父类的方法