如何使 jQuery 构造函数属性全局可见

How to make jQuery constructor properties globally visible

我正在尝试使用标准 Navigator.geolocation 属性 和 jquery 来获取位置坐标变量,以便稍后在我的代码中使用该值:


$(document).ready(function(){

    $.getlocation = function(){
          navigator.geolocation.getCurrentPosition($.getPosition,$.error);
    }

    $.getVariables = function(lat,lon){
          this.lat = lat; // i want these to be visible
          this.lon = lon;
    }

    $.getPosition= function(position){
          console.log("latitude:" +position.coords.latitude+ " longitude: "+position.coords.longitude);
          //this function will be executed once position is determined.


    $.getVariables(position.coords.latitude,position.coords.longitude);
    }

    $.error = function(){alert("error");}

    $.getlocation(); // outputs correctly

    setTimeout(()=>{console.log(this.lat)},5000); // undefined

});

我希望得到位置输出,但我从 console.log(this.lat) 得到 undefined,我确实在 vanilla javascript 中尝试过这个并且它工作正常,这里是 javascript代码:

function locateMe() {

    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(getPosition, error);
    } else {

        alert("connection problem");
    }
}

let vars = function(lat, lon) {
    this.lat = lat;
    this.lon = lon;
}

let getPosition = function(position) {
    vars(position.coords.latitude, position.coords.loongitude);
}


let error = function(msg) {
    console.log("problem");
}

locateMe();

setTimeout(() => { console.log(this.lat); }, 5000); //correct output

如果我将 getVariables 更改为:

,我可以让 this.lat 工作
$.getVariables = function(lat,lon){
    document.lat = lat;
    document.lon = lon;
}

看来这两个 this 对象可能在两个方法中引用不同的东西。