1

我想通过以下描述在 JavaScript 中创建一个类。

本课程是使用 Google 地图模拟卡车在路线上移动的一部分。我想要的是在类方法中使用 setInterval ,就好像它是一个函数一样,能够在使用不同参数重复实例化对象后模拟许多标记。

class RouteMarker { 
    constructor(marker,pointsArray,i) {
        this.marker = marker;
        this.pointsArray = pointsArray;
        this.i=i;
    }
    main() {        
        var myVar = setInterval(function(){this.myTimer}, 7000);
    }
    myTimer() {
        alert('o');
        this.setPostionM(this.i);
        this.i++; 
    }
    setPostionM(key) {     
        this.marker.setPosition(this.pointsArray[key]);     
    }
}
4

1 回答 1

0

你的代码就在那里。


快速概述:

  • 修复了代码中的一些小问题,主要是格式化
  • 确保当.myTimer()函数在所有点上运行时,它会自行停止 ( this._intervalId)。
  • 缩短7000毫秒间隔以1000进行快速演示
  • .myTimer()函数将alert()使用当前索引 ( this.i)调用
  • 创建了一个 mocker 类MockMarker,它只是 Google Maps API 的一个工作占位符,因此您可以在此处运行示例代码。
  • MockMarker注销当前给定的位置

class RouteMarker { 
    constructor(marker, pointsArray, i) {
        this.marker = marker;
        this.pointsArray = pointsArray;
        this.i = i;
    }
    
    main() {
        this._intervalId = setInterval(this.myTimer.bind(this), 1000);
    }

    myTimer() {
        alert('index: ' + this.i);
        this.setPostionM(this.i);
        this.i++;

        if (this.i >= this.pointsArray.length ) {
            console.log('stop myTimer');
            clearInterval(this._intervalId);
        }
    }

    setPostionM(key) {
        this.marker.setPosition(this.pointsArray[key]);
    }
}

class MockMarker {
    setPosition(array) {
        console.log('position: ' + array);
    }    
}

const mockMarker = new MockMarker();
const routeMarker = new RouteMarker(mockMarker, [[10.21, 70.13], [14.62, 56.71], [22.34, 67.26]], 0);

routeMarker.main();

于 2018-06-26T20:45:35.393 回答