属性读写 - getter & setter
getter和setter的作用就是可控的读写
有条件的写入是很有必要的
// age属性读写[这里写法涉及闭包]
let _age = 0.1
const _smallChickenAge = 0.3
// 设置小鸡的岁数常量是0.3年
class Chicken {
constructor (type) {
this.type = type
}
// get就是读属性的方法
// getter就是这个
get age () {
return _age
}
// set就是写属性的方法
// setter就是这个
set age (val) {
if (val < _smallChickenAge) {
_age = _smallChickenAge
} else _age = val
}
}
// 创建实例对象miu小鸡
let miu = new Chicken('chicken')
console.log(miu.age)
// 测试一下年龄读写
miu.age = 0.2
console.log(miu.age)
miu.age = 0.9
console.log(miu.age)
静态方法 - static
静态方法 static类方法
静态方法 绝缘 实例对象!
静态方法只在类上,不在实例对象上!
// 还是用小鸡类做例子
class Chicken {
constructor (type) {
this.type = type
}
eat () {
Chicken.walk()
// 使用类的静态方法
// 静态方法在类上的
// 不是在实例对象上的
console.log('eat Chicken food')
}
static walk () {
// static 关键字就是静态方法
console.log('chicken walking')
}
}
// 创建实例
let miu = new Chicken('chicken')
// 使用对象
miu.eat()
这里会输出
chicken walking
eat Chicken food
因为在eat()方法内
先调用了静态方法 Chicken.walk()
再输出 eat Chicken food
继承 - extends
关键字 extends
语法:class 父类 extends 子类
构造函数可添加子类的新属性
子类和父类属性相同-子类构造函数可不写
super(type)不带{}记住!!!
// 父类 - Animal
class Animal{
constructor(type){
this.type = type
}
eat (){
console.log('eat food')
}
}
// 子类 - Dog
class Dog extends Animal{
constructor(type){
super(type)
// 子类继承原本的构造函数
// 如果有不同的地方这里可以继续添加属性
this.age = 1
// 这里给子类添加age属性
}
}
// 创建实例对象
let dog = new Dog('dog')
// 查看子类的新属性
console.log(dog.age)