一直在断断续续的学习ES6,但是js确实发展的比较快,导致自己对于最近出来的一些新语法,ES7,8,9,10是有些糊涂的,内心是想说,连es6都没 学全呢,不过呢,用的多的就知道,什么let,const啦,解构赋值啦,箭头函数啦,....
但是随着Vue3.0的脚步越来越近,proxy以及相关的东西越来越多,但是说实话,这些只是知道,但是工作中肯定是没有用过的,
今天又翻开了es6的文章,希望在看看class部分,
之前对class总是模糊的,用的确实也是不多,对什么静态方法,静态属性,之类的概念有点懵,那么今天就趁此机会来捋捋
把整个部分看下来呢,发现也还好,
1,静态方法=》就是定义在类本身上面的方法,而不是实例方法,这个需要在方法前面加上关键字static
2,静态属性 既然有方法,一般想到的,应该会有属性吧,但是现在es6规定,class内部只能有静态方法,而不能有静态属性,静态属性一般写在外面
3,实例属性 一般实例属性是写在constructor方法里面的,下面的name和age就都是实例属性,现在实例可以不用写在constructor方法里面,可以写在类的最顶部
4,私有属性和方法 ,私有方法和私有属性,是只能在类的内部访问的方法和属性,外部不能访问。这是常见需求,有利于代码的封装,但 ES6 不提供,只能通过变通方法模拟实现。
clsss Foo(){
count:0 //实例属性也可以这么写,都不用带this
constructor(name,age){
this.name=name,
this.age=age
}
static getName(){ return '我是静态方法' } }
Foo.name = '我是静态属性'
第二部分,就是继承了,可以通过extends
关键字实现继承
//这个是阮一峰老师书里面的例子 class ColorPoint extends Point { constructor(x, y, color) { super(x, y); // 调用父类的constructor(x, y) this.color = color; } toString() { return this.color + ' ' + super.toString(); // 调用父类的toString() } }
摘抄一段比较重要的,关于super的
上面代码中,constructor
方法和toString
方法之中,都出现了super
关键字,它在这里表示父类的构造函数,用来新建父类的this
对象。
子类必须在constructor
方法中调用super
方法,否则新建实例时会报错。这是因为子类自己的this
对象,必须先通过父类的构造函数完成塑造,
得到与父类同样的实例属性和方法,然后再对其进行加工,加上子类自己的实例属性和方法。如果不调用super
方法,子类就得不到this
对象。
其实搞下来呢,内容也还好,是吧,没那么难,起码比通过原型去实现继承还是简单一点吧