ES6之类Class

{
   class Ploygon {
       constructor(width, height)
       {
           this.width = width;
           this.height = height;
       }
       get area() {
           return this.countArea();
       }
       countArea() {
           return this.width * this.height;
       }
   };

   let result = new Ploygon(10, 20);
   console.log(result.area);
}

说明


  • constructor()方法:该方法是类的默认方法,通过 new 创建对象实例时,自动调用该方法;该方法默认返回实例对象(即this)
  • get关键字的用法:有时候访问属性时能返回一个动态计算后的值;不希望通过使用明确的方法调用来显示内部变量的状态
{
   class Point {
       constructor(x, y)
       {
           this.x = x;
           this.y = y;
       }

       static distance(a, b) {
           const dx = a.x - b.x;
           const dy = a.y - b.y;

           return Math.sqrt(dx*dx + dy*dy);
       }
   };

   const pOne = new Point(5, 5);
   const pTwo = new Point(10, 10);

   console.log(Point.distance(pOne, pTwo));
}

说明


  • static关键字:用来定义类的静态方法;该方法不会被实例所继承,只能通过类名来调用;静态方法经常用来作为 工具函数 使用;
  • 子类可以调用父类的静态方法
{
   class People {
       constructor(name)
       {
           this.name = name;
       }

       sayName() {
           console.log(this.name);
       }
   };

   class Student extends People {
       constructor(name, grade)
       {
           super(name);
           this.grade = grade;
       }

       sayGrade() {
           console.log(this.grade);
       }
   };

   const stu = new Student('adiu', '幼儿园');
         stu.sayGrade();
         stu.sayName();
}

说明


  • 子类可以继承父类的所有属性和方法
  • supper()方法调用父类的构造函数(即父类的** this **);子类必须在constructor方法中调用 supper() ,否则新建实例时会报错 this is not defined ,这是因为子类没有自己的 this对象,而是继承父类的this对象,然后对其进行加工;如果不调用super方法,子类就得不到this对象
{
   class People {
       constructor(name)
       {
           this.name = name;
       }

       get name() {
           return this._name.toString().toUpperCase();
       }

       set name(name) {
           this._name = name;
       }

       sayName() {
           console.log(this.name);
       }
   };

   const result = new People('adiu');
   console.log(result.name);
   console.log(result._name);
   result.sayName();
}

说明


  • 在class内部使用 getset 关键字,对某个属性设置取值和赋值函数(定义读写器),拦截该属性的存取行为

你可能感兴趣的:(ES6之类Class)