class关键字
<script>
/*
1.class关键字: 声明类函数 (相当于构造函数)
* (1)构造函数和原型对象写在一个大括号中: 代码清晰
* (2)class类函数必须使用new关键字,不用则会报错 : 代码清晰
class 函数名{
//构造函数
constructor(){
}
//原型对象的方法
eat(){}
}
*/
//ES5原型语法
//1.构造函数
// function Person(name,age){
// this.name = name
// this.age = age
// }
//2.原型对象
// Person.prototype.eat = function(){
// console.log('吃东西')
// }
//3.实例对象
// let p1 = new Person('ikun',30)
// console.log( p1 )
//ES6类函数
class Person{
//1.构造函数
constructor(name,age){
this.name = name
this.age = age
}
//2.原型方法
eat(){
console.log('吃东西')
}
}
//3.实例对象
let p1 = new Person('ikun',30)
console.log( p1 )
</script>
extends关键字
<script>
/* extends关键字作用: 类继承
语法: class 子类函数 extends 父类函数
底层: 替换原型继承(不会覆盖子构造函数的原型)
我们课堂讲的替换原型: s1.__proto__ = Person.prototype (会覆盖s1原来的原型)
extends关键字替换原型的原型:
s1.__proto__.__proto__ === Person.prototype (不会覆盖s1原来的原型)
*/
class Student extends Person{
//子构造函数原型方法
learn(){
console.log('我今天写的很开心')
}
}
let s1 = new Student('刘',20)
console.log(s1)
s1.learn()//调用子类自己的方法
s1.eat()//调用父类方法 (继承:拥有父类所有的成员)
</script>