与JavaScript对象文字和谷歌地图API相关的问题

时间:2015-07-07 23:29:54

标签: javascript google-maps-api-3

此代码未按预期工作。我正在尝试使用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不太熟悉。如果有人能帮助我了解正在发生的事情,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

在您的第一个示例中,当您致电:

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,它在整个外部函数中都有效。