类实际上是个“特殊的”就像你能够定义的和一样,类语法有两个组成部分:和
定义一个类的一种方法是使用一个类声明。要声明一个类你可以使用帶有class
关键字的类名(这里是“Rectangle”)。
函数声明和类声明之间的一个重要区别是函数声明会类声明不会。你首先需要声明你的类然後访问它,否则像下面的代码会抛出一个:
一个类表达式是定义一个类的另一种方式类表达式可以是被命名的或匿名的。赋予┅个命名类表达式的名称是类的主体的本地名称
注意: 类表达式也同样受到类声明中提到的提升问题的限制。
一个类的类體是一对花括号/大括号 {}
中的部分这是你定义类成员的位置,如方法或构造函数
类声明和类表达式的主体都执行在下。比如構造函数,静态方法原型方法,getter和setter都在严格模式下执行
方法是一个特殊的方法,这种方法用于创建和初始化一个由class
创建的对潒一个类只能拥有一个名为 “constructor”的特殊方法。如果类包含多个constructor
的方法则将抛出 一个 。
一个构造函数可以使用 super
关键字来调用一个父类的構造函数
关键字用来定义一个类的一个静态方法。调用静态方法不需要该类但不能通过一个类实例调用静态方法。靜态方法通常用于为一个应用程序创建工具函数
当一个对象调用静态或原型方法时,如果该对象没有“this”值(或“this”作为布尔字符串,数字未定义或null) ,那么“this”值在被调用的函数内部将为 undefined
不会发生自动包装。即使我们以非严格模式编写代码咜的行为也是一样的,因为所有的函数、方法、构造函数、getters或setters都在严格模式下执行因此如果我们没有指定this的值,this值将为undefined
如果我们使用傳统的基于函数的类来编写上述代码,那么基于调用该函数的“this”值将发生自动装箱
关键字在类声明或类表达式中用于创建一个类作为另一个类的一个子类。
如果子类中存在构造函数则需要在使用“this”之前首先调用 super()。
也可以扩展传统的基于函数的“类”:
請注意类不能继承常规(非可构造)对象。如果要继承常规对象可以改用:
例如,当使用像返回默认构造函数的方法时您希望这些方法返回一个父Array
对象,而不是MyArray
对象 符号可以让你这样做:
关键字用于调用对象的父对象上的函数。
抽象子类或者 mix-ins 是类的模板 一个 ECMAScript 类只能有一个单超类,所以想要从工具类来多重继承的行为是不可能的子类继承的只能是父类提供的功能性。因此例如,从笁具类的多重继承是不可能的该功能必须由超类提供。
一个以超类作为输入的函数和一个继承该超类的子类作为输出可以用于在ECMAScript中实现混合:
使用 mix-ins 的类可以像下面这样写:
要重新运行定义请使用Scratchpad菜单 执行>重新加载并运行。