es6之class类的理解

传统的javascript语言中,没有类的概念,生成示例对象是先定义一个构造函数,然后通过new操作符来完成。下面是一个列子。
es6之class类的理解
这种写法与传统的面向对象语言(c++ java)差异很大,对于刚学习这门语言的程序员来说,可能会感到困惑。因此,es6引入了class类这个概念,作为对象的模板,通过class关键字就可以定义类。
1、构造函数实例
es6之class类的理解
注意:class定义类的时候,不需要写function,并且里面的函数不许用简写形式,即:showName(){}不能写成function:showName(){},另外,方法之间不需要用逗号分隔,加了会报错。
es6之class类的理解
可以看出showName在对象的原型上面,事实上,类的所有方法都定义在类的原型上面。好处是每生成一个实例对象都可以使用、showName
2、静态方法
类相当于是实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。
es6之class类的理解
该代码中,Person类的myMethod方法前有static关键字,表明该方法是一个静态方法,可以直接在Person类上调用,而不是在其实例上调用,在实例上面调用会报错。
注意:如果静态方法包含this关键字,这个this指向是类,而不是实例。静态方法可以与费静态方法重名,子类可以继承父类的静态方法。
3、继承
es6之class类的理解
super关键字
1、super作为函数使用
super作为函数调用时,代表父类的构造函数。es6要求,子类的构造函数必须执行一次super函数。并且,作为函数时,super()只能用在子类的构造函数中,用在其他地方就会报错。
2、super作为对象使用
在普通方法中,指向父类的原型对象(因此,定义在父类实例上的方法或属性,是无法通过super调用的),在静态方法中,指向父类。