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},

しかし、それは機能しません=>配列のすべての値は最初の座標のlat/long値を持っています

edit2:以下のコメントでこの回答をしてくれた@DCoderに感謝します:これで解決しました。

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

これは奇妙なことのように思われるかもしれませんが、私が使用しているアルゴリズムは、データに関数呼び出しとしてアクセスする必要があります。これは、アルゴリズムが同じ関数呼び出しlat(を介してのみデータにアクセスできるgoogleapiからのデータも処理するためです。 )および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引数はgetを意味し、1引数はsetを意味する」パラダイムに似たものを使用して、次のように使用できます。

{
  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 に答える