1 class declarations 可以用以下三种方式声明class类,必须先声明在使用;每一个使用class方式定义的类默认都有一个constructor函数, 这个函数是构造函数的主函数, 该函数体内部的this指向生成的实例
An important difference between function declarations and class declarations is that function declarations are hoisted(变量提升) and class declarations are not. You first need to declare your class and then access it,
|
|
2 对比ES5和ES6中的差别
constructor内定义的方法和属性是实例对象自己的,而constructor外定义的方法和属性则是所有实例对象可以共享的。
2.1 创建类的过程差别
ES5中:
|
|
ES6中:
|
|
2.2 类中的方法独立调用的时候,函数内部this指向不同
ES5中:原型上的方法被独立调用,非严格模式下,this会指向window,严格模式下指向undefined
|
|
ES6中: static方法或者原型上的方法被独立调用的时候,无论是否严格模式,其this指向都是undefined
|
|
2.3 class类中static声明的方法不能被实例调用,也不会出现在实例化对象上 ; 可以直接通过类名调用;
The static keyword defines a static method for a class. Static methods are called without instantiating )their class and cannot be called through a class instance. Static methods are often used to create utility functions for an application.
|
|
2.4 先来看下extends关键字的作用 class类实现继承的根本原因就是通过extends关键字,将子类的 proto 属性指向父类构造函数
|
|
|
|
2.5 constructor 方法,以及super关键字
2.5.1 The constructor method is a special method for creating and initializing an object created with a class; There can only be one special method with the name “constructor” in a class. A SyntaxError will be thrown if the class contains more than one occurrence of a constructor method.
A constructor can use the super keyword to call the constructor of a parent class.
constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加。constructor函数默认返回实例对象
- 当创建一个新类的时候,如果没有显式的添加constructor函数,那么默认将会添加一个空的constructor函数
|
|
- 当子类继承父类的时候,如果子类没有显式的添加constructor函数,那么默认将会添加一个constructor,并且自动调用super方法
|
|
2.5.2 super有三种作用, 第一是作为构造函数直接调用,第二种是作为父类实例, 第三种是在子类中的静态方法中调用父类的静态方法;super关键字,它指代父类的实例(即父类的this对象)。子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。如果不调用super方法,子类就得不到this对象
|
|
2.6 classs类中的 get 和 set 对某个属性设置存值函数和取值函数, 拦截该属性的存取行为
下面这个栗子是对name属性的设置值以及获取值
|
|