es6中的类

关于类/class:
类是对象模型,ES6 的 class 可以看作只是一个语法糖,它的绝大 部分功能,ES5 都可以做到,新的 class 写法只是让对象原型的写法更加清晰、更像 面向对象编程的语法而已。
特点:
面向对象,具备属性与方法
   人: Person
  属性: name
  展示名字: showName Person.prototype.showName
相当于ES5中的构造函数
类并没有预解析功能,必须定义完成后再调用
class不存在变量提升,所以需要先定义再使用。因为ES6不会把类的声明提升到代码头部,但是ES5就不一样,ES5存在变量提升,可以先使用,然后再定义。
 
静态方法
类的所有方法都定义在类的prototype属性上面,所有类中定义的方法都会被实例继承,如果在类方法前面加上static关键字就不会被实例继承了。
静态方法是直接通过类名来调用。
注意,如果静态方法包含this关键字,这个this指的是类,而不是实例
super 这个关键字,既可以当做函数使用,也可以当做对象使用。这两种情况下,它的用法完全不用。
第一种情况,super作为函数调用时,代表父类的构造函数。ES6 要求,子类的构造函数必须执行一次super函数。
第二种情况,super作为对象时,在普通方法中,指向父类的原型对象;在静态方法中,指向父类。
 
.类的prototype属性和_proto_属性
大多数浏览器的ES5实现中,每一个对象都有一个_prop_属性,指向相应的构造函数的prototype属性。
Class作为构造函数的语法糖,同时有prototype属性和_prop_属性,因此同时存在两条继承链。
子类的_prop_属性,表示构造函数的继承,总是指向父类。
子类prototype属性的_prop_属性,表示方法的继承,总是指向父类的prototype属性。
 
 
Object.propotypeOf方法可以用来从子类上获取父类。
Object.propotypeOf(colorPoint) === Point
//true
因此,使用这个方法判断,一个类是否继承了另一个类,
 
hasOwnProperty()函数用于判断属性是否是实例属性。其结果是一个布尔值, true说明是实例属性,false说明不是实例属性。
in操作符会在通过对象能够访问给定属性时返回true,无论该属性存在于实例中还是原型中。
关于类的其它用法
1.在“类”的内部可以使用 get 和 set 关键字,对某个属性设置存值函数和取值函数, 拦截该属性的存取行为。
2.静态方法: 所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上 static 关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态 方法”。
3.函数表达式:与函数一样,类也可以使用表达式的形式定义。
4.类的继承
原文地址:https://www.cnblogs.com/bjyx/p/11987645.html