2014-05-15 21 views
0

有人可以照亮一個光線爲什麼一個人得到「不能讀取屬性」未定義的「推動」我的JS技能是有限的。未定義的推送屬性

function Position(position) { 
     if (!position) { 
     throw new Error('No position object given!'); 
     } 
     this.lat = parseFloat(position.lat); 
     this.lon = parseFloat(position.lon); 

     this.timestamp = position.timestamp; 
     this.heading = position.heading; 
     this.speed = position.speed; 
    }; 

    Position.prototype.getLatLng = function() { 
     return new L.LatLng(this.lat, this.lon); 
    }; 


    function Positions(positions) { 
     if (!(positions instanceof Array)) { 
     throw new Error('No positions array given!'); 
     } 
     for (var i = 0; i < positions.length; i++) { 
     this.positions.push(new Position(positions[i])); 
     } 
    }; 
+4

因爲沒有定義'this.positions' – smerny

+4

也許你想'位置'(不是'this.positions')? – vaultah

+0

您在該代碼中唯一調用'push'的位置是'Positions'內部,這是您永遠不會在該代碼中調用的函數。所以無論問題是什麼,它都不會被你的問題所揭示。這可能歸結爲「JavaScript是如何工作的?」雖然。 – Quentin

回答

0

嘗試

for (var i = 0; i < positions.length; i++) { 
     positions.push(new Position(positions[i])); 
     } 
+0

這將導致無限循環。隨着您向其推送新項目,'positions.length'將繼續增長。 –

+0

它的「this.positions」應該是「返回職位」。你先給出正確的答案。 –

+1

@JermaineHercules,這是一個正確的答案?它會使您的頁面崩潰。 – smerny

2

this.positions在這個函數沒有定義。嘗試在推送操作之前對其進行定義。

this.position = [];