我想要完成的是调用result.MappingWaypoints[i].lat();
和
result.MappingWaypoints[i].lng();
代替result.MappingWaypoints[i].lat;
和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()。谢谢:)
答案 0 :(得分:1)
您的原始方法遇到了this question中描述的问题 - 由于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参数意味着get,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
答案 1 :(得分: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;
答案 2 :(得分:0)
lat : function() { return current_point_gps.lat },
lng : function() { return current_point_gps.lng },
我不明白为什么这是必要的