gpt4 book ai didi

javascript - 与 JavaScript 对象文字和 google map API 相关的问题

转载 作者:行者123 更新时间:2023-12-03 09:37:43 26 4
gpt4 key购买 nike

此代码未按预期工作。我正在尝试使用 Google Geolocation API 来确定我当前的位置。但是,当我尝试记录 google.maps.LatLng 对象的结果时,我得到 (0,0) 作为纬度和经度坐标。

        $(document).ready(function(){
var func = {
lat:0,
long:0,
success:function(pos) {
var crd = pos.coords;
this.lat = crd.latitude;
this.long = crd.longitude;
},

error:function(err) {
console.log('ERROR(' + err.code + '): ' + err.message);
},

init:function(){
navigator.geolocation.getCurrentPosition(this.success, this.error);
}

};

func.init();

$('button').on('click',function(){
var loc = new google.maps.LatLng(func.lat, func.long);

alert(loc);
});
});

但是,下面的代码可以工作。我所做的只是将“this”关键字更改为对象的名称。应该没有什么区别。

       $(document).ready(function(){
var func = {
lat:0,
long:0,
success:function(pos) {
var crd = pos.coords;
func.lat = crd.latitude;
func.long = crd.longitude;
},

error:function(err) {
console.log('ERROR(' + err.code + '): ' + err.message);
},

init:function(){
navigator.geolocation.getCurrentPosition(func.success, func.error);
}

};

func.init();

$('button').on('click',function(){
var loc = new google.maps.LatLng(func.lat, func.long);

alert(loc);
});
});

我不确定为什么顶部的代码片段会产生错误的输出?我对面向对象的 JavaScript 不太熟悉。如果有人能帮助我了解发生了什么,我将不胜感激。

最佳答案

在第一个示例中,当您调用时:

getCurrentPosition(this.success, this.error);

您只是将successerror 函数传递到getCurrentPosition 中。即使您通过 this 在这里引用它们,也不会执行到实际调用函数的地方。它仅传递函数引用本身,而不传递您在此处使用的 this 值。

理解该问题的另一种方法:函数内 this 的值是在调用函数时确定的。。当您编写 foo.bar() 时,您正在调用 bar() 函数,并将 foo 作为 this 值函数内部。但是,当您编写没有 ()foo.bar 时,您只能获得对 bar 本身的引用。之后 foo 就不再出现了。如果将 foo.bar 传递到另一个需要回调的函数中,则当它最终调用 bar() 时,不再与 foo 关联.

这就是你的第二个例子有效的原因。它不依赖于 this,而是使用 func,它在整个外部函数中都有效。

关于javascript - 与 JavaScript 对象文字和 google map API 相关的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31281126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com