/**
* @desc 继承 extends supr()
* extends 继承父类中的方法 或者 变量
* supr() 调用父类中的 构造函数 或者方法 supr() 必须写在子类 constructor 中 this 的前面 这是class 规定的 不然报错
* 当调用 父类中的方法和子类中间的方法名字一致时
* 优先调用子类中的该方法 如果想调用父类中的方法时候
* 就近原则
* 我们需要用到在子类的方法中supr.'父类中的方法名'(参数一,参数二)
*/
class A {
constructor(x,y){
this.x = x;
this.y = y;
}
money(){
consloe.log('100块钱')
},
num(){
// 计算求和方法
consloe.log(this.y + this.x)
},
}
class B extends A{
constructor(x,y){
this.x = x;
this.y = y;
}
}
let b = new B()
b.money() = '100块钱'
b.num(1,5) // this指向报错
解答:
因为num方法是A的方法
num方法中的this 指向的是A
这个时候我们就用到了call方法,去改变this指向
但是我没有尝试,有时间我回去尝试一下
同样的 class 中的 `supr()`方法可以调用父类中的构造函数
class B extends A{
constructor(x,y){
supr(x,y)
}
}
就好了!!!!
4. 类的静态方法
/*
* @desc static 静态方法声明
* 静态属性是通过软拷贝实现继承的。
* 俗称: 软拷贝 就是拷贝 表面一层
*/
// static的使用
class A {
static getPage(){
console.log('获取到了')
}
}
class B extends A {}
const b = new B()
b.getPage() = '获取到了'
// static的使用变量
class A {
static num = 100
}
class B extends A {
constuctor(){
super()
B.num --
}
}
const b = new B()
ocnst a = new A()
conselo.log(a.num) = 100
conselo.log(b.num) = 99
/* es6 官网介绍说的是 B 继承了 A 的静态方法,
* 然而B 也继承了A 的 属性 num
* 所以 A 和 B 是隔离的
* 个人理解 就是 A 的作用域中 有 num
* B 把 A 拷贝了 一份 包括 静态方法
* 然:B 生成了 一个新的 作用域,作用域中同有 num
/
5. 类的声明私有属性
/*
* @desc 私有属性就是 指当前类 中 自己的 不给别人的
*/
class A {
#num = 0
nums = 0
}
class B extends A {}
const b = new B(
// 以下报错说 #nums 不在 这个 class 类中
console.log = '#nums' must be declared in an enclosing class
console.log(b.nums); = 0
// 1.19 电脑没电 后续补上