类
在JavaScript其实本来没有类的概念,哪怕是ES5以后的class,严格意义上来说也只是构造函数的语法糖,之所以喜欢称之为类,因为JavaScript也可以面向对象开发。
类的声明
class Person {}function Person1() {}// 上面两种写法本质上是一样的
console.log(typeof Person)
console.log(typeof Person1) 
类的构造函数
class Person {
    // 一个类只能有一个构造函数
     constructor(name, age) {
         this.name = name;
         this.age = age;
     }
 }
类的方法
class Person {
     // 构造函数
     constructor(name,age) {
         this.name = name;
         this.age = age;
     }
     
     // 普通的实例方法
     // 创建出来的对象进行访问
     // var p = new Person()
     // p.sayName()
     sayName(){
         console.log(this.name)
     }
     
     // 静态方法
     // Person.sayAge()
     static sayAge(){
         console.log(this.age)
     }
     
     // 类的访问器,也就是Object.defineProperty中的 get 和 set
     get Name() {
         return name;
     }
     
     set Name(newValue) {
         this.name = newValue;
     }
 }
再谈JavaScript原型链
在实现真正的继承之前,我们再来看一下一个非常重要的概念:原型链

Object的原型
Object是所有类的父类,它的原型是[Object: null prototype] {},事实上这个原型就是我们最顶层的原型了,从Object直接创建出来的对象的原型都是 [Object: null prototype] {}。
Object特殊的地方
- 该对象有原型属性,但是它的原型属性已经指向的是null,也就是已经是顶层原型了;
var obj = {} console.log(obj.__proto__) //[Object: null prototype] {} console.log(obj.__proto__.__proto__) null- 该对象上有很多默认的属性和方法

- 该对象是所有类的父类
-  function Person(name, age){this.name = name;this.age = age;}var p1 = new Person("why",18);