0

我想要完成的是调用result.MappingWaypoints[i].lat();and result.MappingWaypoints[i].lng();而不是result.MappingWaypoints[i].lat;and result.MappingWaypoints[i].lng

这甚至可能吗?

var result = new Array();
    result = {
        'MappingWaypoints': MappingWaypoints,
        'Flightime': flight_time_sec,
        'PhotoArea': {  'SouthWest': MeterstoGPS(starting_photo_area),
                        'NorthEast': MeterstoGPS(end_photo_area)},
    };


 MappingWaypoints.push(
 {
    lat : current_point_gps.lat,
    lng : current_point_gps.lng,
    Radius : 10,
    Altitude : Attitude,
    ClimbRate : ClimbRate,
    DelayTime : DelayTime,
    WP_Event_Channel_Value : 100,
    Heading : 0,
    Speed : Speed,
    CAM_Nick : 0,
    Type : 1,
    Prefix : "P"
 }

编辑:我尝试添加:

lat: function(){ return current_point_gps.lat},`


lng : function(){ return current_point_gps.lng},

但这不起作用=>数组的所有值都具有第一个坐标的纬度/经度值

edit2:感谢@DCoder 在下面的评论中给出这个答案:这为我解决了这个问题。

lat: (function(v) { return function() { return v; } })(current_point_gps.lat)

我知道这似乎是一件奇怪的事情,但是我正在使用的算法确实需要将数据作为函数调用来访问,因为该算法还处理来自 google api 的数据,其中数据只能通过相同的函数调用 lat( ) 和 lng()。谢谢 :)

4

3 回答 3

1

您最初的方法遇到了这个问题中描述的问题- 由于 JS 变量范围,所有函数都将指向(并返回)相同的变量。

您需要捕获要为每个属性返回的值,而不是捕获变量。最简单的方法是自执行函数:

{
  lat: (function(v) { return function() { return v; } })(current_point_gps.lat),
  lng: (function(v) { return function() { return v; } })(current_point_gps.lng),
  ....
}

如果您还需要编辑lat属性的方法,则可以向对象添加公共属性,如下所示:

{
  lat: function() { return this._lat; },
  _lat: current_point_gps.lat
}

或者您可以使用类似于 jQuery 的“0 个参数表示获取,1 个参数表示设置”范例并使用以下代码:

{
  lat: (function(v) { return function() { 
    if(arguments.length) {
      v = arguments[0];
    } else { 
      return v; 
    };
  })(current_point_gps.lat)
}

obj.lat(); // returns the current value
obj.lat(55); // changes the current value to 55, returns nothing
obj.lat(); // returns 55
于 2012-09-18T09:48:43.833 回答
0

您需要将它们作为函数调用。

lat : function(){ return current_point_gps.lat },
lng : function(){ return current_point_gps.lng },

那应该有效(未经测试;))。

但是你为什么不想这样做呢?

编辑:

如果要传递函数,则不应调用该函数。

// Pass the Result of a function, the function is called
var foobar = result.MappingWaypoints[i].lng();

// Pass the function itself, the function wont be called
var foobar = result.MappingWaypoints[i].lng;
于 2012-09-18T09:31:55.717 回答
0
lat : function() { return current_point_gps.lat },
lng : function() { return current_point_gps.lng },

我不明白为什么这是必要的

于 2012-09-18T09:32:12.547 回答