【问题标题】:Cannot call method of undefined but alert(method) still working无法调用未定义的方法但警报(方法)仍在工作
【发布时间】:2013-11-21 07:30:55
【问题描述】:

我已经玩了一个小时,这可能是我遗漏的一些小东西,但我似乎无法获得 Google API 路径方法“.lat()”或“.lng() “在我的职能中工作。但是,如果我警告相同的方法,它会向我显示 lat/lng 值就好了。此函数正在尝试构建 Maps Engine 查询的 WHERE 子句的 LINESTRING 部分。

queryWhere += "ST_DISTANCE(geometry,ST_GEOMFROMTEXT('LINESTRING(";

    for(x = 0; x <= path.length; x=x+2){

        queryWhere += path[x].lng() + " " + path[x].lat();

        if(!path[path.length - 1] || !path[path.length - 2]){

            queryWhere += ", ";
                }
        }
            queryWhere += ")'))<5000";   

我正在返回“未捕获的类型错误:无法调用未定义的方法 'lng'”,但是如果我这样做了:

alert(path[x].lng() + " " + path[x].lat());

一切正常。

【问题讨论】:

    标签: javascript google-maps-api-3 methods google-maps-engine


    【解决方案1】:

    只能检查数组中的最后一个元素。索引是从零开始的,所以最后一个索引是( length - 1)

    改为less than length

    for(x = 0; x < path.length; x=x+2)
    

    您在代码中超出了数组,因此最后一次传递将返回 undefined for path[x]

    【讨论】:

    • 天哪,我什至没有注意到我这样做了。我多么愚蠢。非常感谢!
    【解决方案2】:

    我认为它可能来自您的循环。

    for(x = 0; x <= path.length; x=x+2){
    

    这里,x 可以等于path.length。但是,因为它从 0 开始,所以数组的最后一个索引是path.length-1

    你需要使用严格的比较器:

    for(x = 0; x < path.length; x=x+2){
    

    或者减少长度:

        for(x = 0; x <= path.length-1 ; x=x+2){
    

    【讨论】:

      猜你喜欢
      • 2017-05-18
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      相关资源
      最近更新 更多