class Animal {
// 注意在 class 的 {} 区间内 只能写 构造器,静态属性和静态方法
//注意2 class 关键字内部还是用的 js 方法来实现的。所以我们把class称为 语法糖。
//这是类中的构造器
// 每一个类中,都有一个构造起,如果我们程序员没有手动指定构造器,那
// 么,可以认为类内部有个隐形的看不见的,空构造函数类似与 constructor()
// 构造器的作用,就是 每当 new 这个类的时候,必然会优先执行构造函数的代码。
// 类似于 构造函数 用 new 创建的 时候 会执行 构造函数体的 代码块 就是实例属性
/*
function Animal(name,age) {
this.name = name
this.age = age
}
new Animal('333',12)
* */
constructor(name, age) {
this.name = name
this.age = age
}
// 静态属性 :通过构造函数 直接访问倒跌属性,就叫做静态属性
/*
function Animal(name,age) {
this.name = name
this.age = age
}
var ani = new Animal('333',12)
Animal.info = 1000
Animal.showName = function(){}
用 实例 ani.info 是取不到的 打印 undefined
ani.show 没有这个方法
* */
static info = 'eeeee'
// 只能通过 Animal.info 去使用
static showName = function () {
}
// 只能通过 Animal.showName 去使用
// 创建共同的方法 类似于 构造函数 原型链上的方法 可以在实例 上调用
say() {
console.log('简洁的军事基地')
}
}
// class 继承
// 在class类中,可以使用extends 关键字,实现子类继承父类
// 语法 class 子类 extends 父类
class Person {
constructor(name,age) {
this.name = name
this.age = age
}
sayHello(){
console.log(1122122122)
}
static foo = 12222
}
class America extends Person{
// 如果子类不写constructor 那么就会默认调用父类的 如果从写 要使用 父类的 数据,必须传参数
constructor(name,age){
// 问题1 ? 为什么要在 constructor 中调用super
// 答案 因为 如果一个子类 通过extends 关键字继承了 父类那么在子类的constructor 构造函数中,必须优先调用一下 super()
// 问题2 super 是什么
// 答案 super 是一个函数,而且它是 父类构造器,。子类中的 super。其实就是 父类中,constructor构造器的一个医用
// 问题3 为什么调用了super() 之后 a1 实例 对的 name 和 age 都变成了undefined 了?
super()
// 如果 想要给父类 的constructor 传参数,就要在 super 中传递参数
// super(name,age)
}
}
const a1 = new America('jack',30)
console.log(a1)
a1.sayHello()
console.log(America.foo)
class Chinese extends Person{
constructor(name,age,cardId){
// 在子类中 this只能在 super 之后使用
super(name,age)
this.cardId = cardId
}
}
const a2 = new Chinese('jack',30,5002225)
console.log(a2)
网友评论