概述
1.在ES6中,class (类)作为对象的模板被引入,可以通过 class关键字定义类。
2.class 的本质是 function。
3.class可以看作一个语法糖,让对象原型(js底层是原型的思想)的写法更加清晰、更像面向对象编程的语法。(js是一个基于面向对象的单线程的脚本语言)
4.类不可重复声明
5.类定义不会被提升,即必须在访问前对类进行定义,否则就会报错
定义
1.命名类
2.匿名类
constructor官方提供,必须写这个单词,这个单词就可以使类用来创建对象,类中不能直接var声明变量否则会报错,变量只能声明在constructor中。可以不写constructor,系统会默认内置一个空的constructor。
方法
1.constructor 方法是类的默认方法,创建类的对象时该方法被调用,调用后就可以为创建的对象添加初始成员。也被称为类的构造方法(构造函数、构造器)。一个类中有且仅有一个构造方法。
2.原型方法和对象属性:不需要使用function关键字,通过“对象.原型方法”调用。不写在constructor方法内部的方法是添加在实例对象的原型对象上的,而不是添加给实例对象。而没有声明的变量是作为实例对象的属性添加在实例对象上的,而不是作为属性添加在全局对象window。
以上代码等价于,但是函数内部的没有声明的变量在执行后是在全局对象上隐式声明一个变量,再把值赋值给变量,变量作为全局对象window的一个属性。
3.静态成员:静态方法是类的方法:使用static修饰,调用时不需要创建对象,直接通过“类名.静态方法”调用
以上代码等价于
类的继承
1.解决代码的复用
2.子类使用extends关键字实现继承,子类可以继承父类中所有的方法和属性,包括父类的静态方法和静态属性。
3.子类只能继承一个父类(单继承),一个父类可以有多个子类
4.子类的构造方法中必须有super() 来指定调用父类的构造方法,并且位于子类构造方法中的第一行
5.子类中如果有与父类相同的方法和属性,将会优先使用子类的(覆盖)
内部类
内部类属于外部类的成员,必须通过“外部类.内部类”访问