前言
-
在之前我们学到的面对对象编程的思想中,我们去解决一个问题去找对象,对象不存在我们便去创造对象;
-
那么我们之前去如何去创建对象的呢?是通过创建构造函数去创建对象的
// 创建构造函数
function Person(name,age){
this.name = name;
this.age = age;
this.say = function(){
console.log(this.name);
}
}
Person.sList = [];
Person.prototype.eat= function(){
}
// 创建对象
const p1 = new Person('小明',23);
-
那么接下来我们将学习如何通过 class 类来创建对象
一、class类
(1)javascript中的class类型与java中的class类的性质差不多,其中都有成员变量和方法(其中包含原型方法和原型属性),也有继承的属性;下面我们来创建一个简单的类:
class Person{
static sList = []; // 静态成员
// 构造器 - 一般定义类属性
constructor(name,age){
this.name = name;
this.age = age;
}
// 定义原型方法
eat(){
console.log(this.name+'在吃饭');
}
// 定义成员方法-箭头函数
sayHi = (content)=>{
console.log(`${this.name}说的内容是 ${content}`);
}
}
// 实例化对象
let p1 = new Person('小丽',22);
let p2 = new Person('小红',21);
console.log('姓名是 ',p1.name);
p1.eat();
console.dir(Person)
console.dir(p1)
console.dir(p2)
p1.sayHi('今天学习javascript高级内容');
注意:在定义成员方法和原型方法的时候,最大的区别就是成员方法是通过箭头函数定义的
(2)打印结果
-
Person 构造函数
原型对象中包含原型方法
-
p1 p2实例对象
示例对象中有成员方法
二、class类继承
1. 构造函数的继承
(1)构造函数继承
function Person(name){
this.name=name;
}
function Student(){
Person.call(this,'小明');
}
(2)拷贝继承 for-in
(3)原型继承-改变原型指向
2. class类的继承
(1)注意:
- 在class类中,我们用extends关键字实现继承
- 当子类继承父类时,需要在子类的constructor中用super()调用父类的构造函数
// 父类
class Person{
constructor(name, age) {
this.name = name;
this.age = age;
}
}
// 子类
class Student extends Person{
constructor(name, age,number,score){
super(name, age); // 调用父类构造函数
this.number = number;
this.score = score;
}
}
let s1 = new Student("张三", 15, 1001, 98);
console.log(s1.name);
console.dir(Person)
console.dir(Student)
console.dir(s1)
(2)打印结果:
-
s1.name 学生姓名
-
Person 类
-
Student 类
student类中的原型对象继承了Person类
-
s1 实例对象
示例对象中有name 和 age 属性