1

我有这个类,还有一些方法,这里有更多代码JS Bin

var Maps = (function () {

function Maps() {

}

Maps.prototype.getCoord = function () {
    navigator.geolocation.getCurrentPosition(this.onPositionSuccess, this.onPositionError);
};

Maps.prototype.getWatchCoord = function () {
    var options = { enableHighAccuracy: true, timeout: 3000 };
    navigator.geolocation.watchPosition(this.onWatchSuccess, this.onWatchError, options);
};

Maps.prototype.onPositionSuccess = function (position) {
    var pos = {
        'latitude'          : position.coords.latitude,
        'longitude'         : position.coords.longitude
    };
    console.log(pos);
};

Maps.prototype.onWatchSuccess = function (position) {
    var pos = {
        'latitude'          : position.coords.latitude,
        'longitude'         : position.coords.longitude
    };
    console.log(pos);
};

Maps.prototype.onWatchError = function (error) {
    console.log(error.code);
};
Maps.prototype.onPositionError = function (error) {
    console.log(error.code);
};

return Maps;

})();

var maps = new Maps();
    maps.getCoord();

我想要做的是如果getCoord()是成功然后调用getWatchCoord()并比较latitudeand longitude。如果它们相同,请不要运行getWatchCoord()

如果可能的话,我试图在该 Maps 类中执行此操作。

我尝试了几种方法,但似乎我不能getWatchCoord()在里面调用,onPositionSuccess() 我不能设置var x = navigator.geolocation.getCurrentPosition....然后return pos;在成功回调中<-它不会返回任何东西

有任何想法吗?

4

1 回答 1

0

你在使用 jQuery 吗?如果是,请执行以下操作:

var Maps = (function () {

function Maps() {

}

Maps.prototype.getCoord = function () {
    navigator.geolocation.getCurrentPosition($.proxy(this.onPositionSuccess, this), $.proxy(this.onPositionError, this));
};

Maps.prototype.getWatchCoord = function () {
    var options = { enableHighAccuracy: true, timeout: 3000 };
    navigator.geolocation.watchPosition($.proxy(this.onWatchSuccess, this), $.proxy(this.onWatchError, this), options);
};

Maps.prototype.onPositionSuccess = function (position) {
    var pos = {
        'latitude'          : position.coords.latitude,
        'longitude'         : position.coords.longitude
    };
    console.log(pos);

    //call getWatchCoord
    this.getWatchCoord();
};

Maps.prototype.onWatchSuccess = function (position) {
    var pos = {
        'latitude'          : position.coords.latitude,
        'longitude'         : position.coords.longitude
    };
    console.log(pos);
};

Maps.prototype.onWatchError = function (error) {
    console.log(error.code);
};
Maps.prototype.onPositionError = function (error) {
    console.log(error.code);
};

return Maps;

})();

var maps = new Maps();
    maps.getCoord();

如果你没有传递一个回调函数,这个回调函数是正确的“this”,那么当进入成功回调时,“this”将是全局的,这就是我在上面使用$.proxy的原因。现在这是未经测试的,所以我不知道你在这里还有什么其他问题。

于 2013-02-07T22:23:31.880 回答