1

Javascript Noob が義務を求めています!

以下のコードを書きたいと思います。

var p1 = new LatLon(userLat, userLon);                                                    
var p2 = new LatLon(destLat, destLon);  
var dist = p1.distanceTo(p2);    

つまり、位置を作成し、引数として 2 番目の位置を取ることができる種類の Javascript 構造体を作成する必要があります。距離を計算するためのコードは必要ありません。オブジェクトを作成し、引数を受け入れる方法を理解する必要があるだけです。ここに私の擬似コード/失敗した試みがあります:

function LatLon(userLat, userLon) {
    var pos = {
      'lat': userLat, 'lon': userLon, 'distanceTo': distanceBetweenTwoPos(pos, pos2);
    }
    return pos;
}

function distanceBetweenTwoPos(pos, pos2){
    // here I will do my own calculations. 
}

上記に似ているが機能するものを取得するための助けはありますか?

4

3 に答える 3

2

典型的なプロトタイプの継承アプローチを使用すると、次のようになります。

function LatLon(userLat, userLon) {
    this.lat = userLat;
    this.lon = userLon;
}

LatLon.prototype.distanceTo = function(pos2){
    console.log(this.lat, pos2.lat);
    console.log(this.lon, pos2.lon);
    // return the result
}

コンストラクターの内部では、 で呼び出しているため、構築LatLon中のオブジェクトへの参照であり、ステートメントが必要です。新しいオブジェクトを返します。newthisreturn

内部distanceTothisは、メソッドを呼び出したオブジェクトへの参照になるため、コードではp1オブジェクトへの参照になります。

そしてもちろんp2、引数として渡されます。

var p1 = new LatLon(userLat, userLon);
var p2 = new LatLon(destLat, destLon);  
var dist = p1.distanceTo(p2); 
于 2012-10-02T11:09:21.823 に答える
2
function LatLon(userLat, userLon) {
    this.pos = {
      'lat': userLat,
      'lon': userLon
    }
}

LatLon.prototype.distanceTo = function(pos2){
    return this.pos.lat + pos2.pos.lat;
}

var p1 = new LatLon(1, 2);                                                    
var p2 = new LatLon(3, 4);  
var dist = p1.distanceTo(p2); 

alert(dist);

デモ: http://jsfiddle.net/6NGhY/

于 2012-10-02T11:19:10.273 に答える
0

試す:

function LatLon(userLat, userLon) {
    this.lat=userLat;
    this.lon=userLon;
    this.distanceTo=function(to){ return distanceBetweenTwoPos(this, to);}   

}
于 2012-10-02T11:09:07.907 に答える