当前位置:嗨网首页>书籍在线阅读

10-静态方法

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

9.2.5 静态方法

目前为止,讨论的方法都是实例方法。也就是说,它们只针对每个具体的实例才有用。还有一种静态方法(也叫类方法),它不与实例绑定。在静态方法中,this绑定的是类本身,但通常使用类名来代替 this 是公认的最佳实践。

静态方法通常用来执行一些与类相关的任务,而非跟具体的实例相关。下面将沿用汽车VINs(车辆识别码)的例子。单独的汽车能够产生自己的VIN显然是不合理的,那么如何防止两辆汽车使用相同的VIN呢?分配VIN是一个对于大部分汽车都适用的抽象概念,因此,这是一个适合静态方法的场景。另外,静态方法通常是一些用来操作多辆汽车的方法。例如,可能希望有一个叫 areSimilar 方法来判断两辆汽车是否具有相同的品牌和型号,或者 areSame 方法来判断两辆车是否具有相同的VIN。下面来看看这些静态方法在 Car 中的实现:

class Car {
   static getNextVin() {
      return Car.nextVin++;       // 也可以使用 this.nextVin++,
                                  //这里使用Car是为了强调这是一个静态方法
   }
   constructor(make, model) {
      this.make = make;
      this.model = model;
      this.vin = Car.getNextVin();
   }
   static areSimilar(car1, car2) {
      return car1.make===car2.make && car1.model===car2.model;
   }
   static areSame(car1, car2) {
      return car1.vin===car2.vin;
   }
}
Car.nextVin = 0;
const car1 = new Car("Tesla", "S");
const car2 = new Car("Mazda", "3");
const car3 = new Car("Mazda", "3");
car1.vin;      // 0 
car2.vin;      // 1 
car3.vin       // 2
Car.areSimilar(car1, car2);     // false
Car.areSimilar(car2, car3);     // true 
Car.areSame(car2, car3);        // false
Car.areSame(car2, car2);        // true