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()比較することです。それらが同じである場合は実行しないでくださいlatitudelongitudegetWatchCoord()

可能であれば、その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 に答える