此代码未按预期工作。我正在尝试使用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);
});
});
然而,下面的代码可行。我所做的只是改变了#34;这个"对象名称的关键字。它不应该有所作为。
$(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);
});
});
我不确定为什么顶部的代码段会产生错误的输出?我对Objected Oriented JavaScript不太熟悉。如果有人能帮助我了解正在发生的事情,我将不胜感激。
答案 0 :(得分:1)
在您的第一个示例中,当您致电:
getCurrentPosition(this.success, this.error);
您只是将success
和error
函数传递给getCurrentPosition
。即使你通过this
在这里引用它们,也没有进行到实际调用函数的程度。它只传递函数引用本身,而不是您在此处使用的this
值。
理解问题的另一种方法:函数内部this
的值在调用函数时确定 。当您编写foo.bar()
时,您正在使用bar()
调用foo
函数作为函数内的this
值。但是当您在foo.bar
之后编写()
时,您只能获得对bar
本身的引用。之后foo
已经不在了。如果您将foo.bar
传递给另一个需要回调的函数,那么当它最终调用bar()
时,就不再与foo
建立任何关联。
这就是你的第二个例子有效的原因。它不依赖于this
,而是使用func
,它在整个外部函数中都有效。