● 这篇文章和大家一起学习创建类来管理我们的锻炼数据
● 首先我们先创建这些类,然后讲锻炼数据中的数据写出来
class Workout {
date = new Date();
constructor(coords, distance, duration) {
this.coords = coords;
this.distance = distance; //km
this.duration = duration; //min
}
}
● 通过ID来生成唯一标识符
class Workout {
date = new Date();
id = (new Date() + '').slice(-10); //通过取时间戳的方式来当作唯一标识符
constructor(coords, distance, duration) {
this.coords = coords;
this.distance = distance; //km
this.duration = duration; //min
}
}
● 之后我们通过继承的方式来生成跑步和骑行的类
class Running extends Workout {
constructor(coords, distance, duration, cadence) {
super(coords, distance, duration); //调用父类构造函数
this.cadence = cadence;
}
}
class Cycling extends Workout {
constructor(coords, distance, duration, elevationGain) {
super(coords, distance, duration);
this.elevationGain = elevationGain;
}
}
● 但是对于跑步和骑行来说,还有其他的方法参数,比如速度,
class Running extends Workout {
constructor(coords, distance, duration, cadence) {
super(coords, distance, duration); //调用父类构造函数
this.cadence = cadence;
this.calcPace();
}
//计算配速
calcPace() {
this.pace = this.duration / this.distance;
return this.pace;
}
}
class Cycling extends Workout {
constructor(coords, distance, duration, elevationGain) {
super(coords, distance, duration);
this.elevationGain = elevationGain;
this.calcSpeed();
}
//计算速度
calcSpeed() {
this.speed = this.distance / (this.duration / 60);
return this.speed;
}
}
● 之后我们创建一些实例来测试一下我们的类有没有问题
const run1 = new Running([39, -12], 5.2, 24, 178);
const cycling1 = new Cycling([39, -12], 27, 95, 523);
console.log(run1, cycling1);
● 很明显,我们的id唯一标识符是有问题的,我们来修改一下
class Workout {
date = new Date();
id = (Date.now() + '').slice(-10);
constructor(coords, distance, duration) {
this.coords = coords;
this.distance = distance; //km
this.duration = duration; //min
}
}
class Running extends Workout {
//继承Workout类
constructor(coords, distance, duration, cadence) {
super(coords, distance, duration); //调用父类构造函数
this.cadence = cadence;
this.calcPace();
}
//计算配速
calcPace() {
this.pace = this.duration / this.distance;
return this.pace;
}
}
当然,这种方式创建ID,仍然可能出现相同的id,但是我们暂且先这么做,自己有兴趣的话可以通过UUID的方式在后面增加,这种碰撞率就非常低了