我一直在閱讀大量的問題,無法找到我的問題的答案。我已經使用JavaScript作爲程序約2年了,現在已經決定現在是時候讓我咬緊牙關,弄清楚面向對象的代碼。我已經聲明爲下面定義的對象:在另一個功能中訪問對象屬性
function Driver(driverName, startAddress){
this.driverName = driverName;
this.address = address;
this.inventory = 0;
this.latCoord = 0;
this.lngCoord = 0;
}
,並通過使用Driver.prototype.functionName = function(){};
語法專爲驅動程序對象的功能。這一切都很好。
然後我聲明瞭一個全局變量FULL_LIST = [];
並有一個函數如下:
function initialize(){
// init geocoder
GEOCODER = new google.maps.Geocoder();
// init map
var latlng = new google.maps.LatLng(-34.397, 150.644);
var mapOptions = {
zoom: 8,
center: latlng
}
MAP = new google.maps.Map($('#map-canvas'), mapOptions);
// init list of all drivers
$.ajax({
type: "POST",
url: "actions/getDriverInfo.php",
dataType: "json",
success: function(data){
var names = data.names,
addresses = data.addresses;
for (var i = names.length - 1; i >= 0; i--) {
var driver = new Driver(names[i], addresses[i]);
FULL_LIST.push(driver);
};
}
});
run();
}
我最大的問題來自於我想要做像下面的函數的事實:
function run(){
// plot points
var bounds = new google.maps.LatLngBounds();
for(var i=0; i<FULL_LIST.length; i++){
var node = FULL_LIST[i];
var marker = new google.maps.Marker({
map: MAP,
position: {
node.latCoord,
node.lngCoord
},
title: node.driverName
});
bounds.extend({
node.latCoord,
node.lngCoord
});
MAP.fitBounds(bounds);
}
}
google.maps.event.addDomListener(window, 'load', initialize);
因爲run()
無法知道node
是一個驅動程序,我不認爲它期望.latCoord
,我在該行上得到"TypeError unexpected ."
。有沒有辦法將node
作爲驅動程序?沒有更大規模的命名空間包裝它是否有問題?或者我完全搞砸了這個問題?
感謝@fgb的洞察力,認爲這個問題是谷歌地圖語法問題。對於那些指出AJAX的異步效應的人,我知道這與我所遇到的問題無關。爲了簡單起見,我剪掉了大量的代碼,然後我排除了一些其他的ajax調用,並將run()
fxn刪除。
但是,我原來的問題仍然存在,儘管有所改變。爲什麼這個工作?我會認爲,因爲對象和它的屬性被定義在一個不同的函數中,所以run
函數不會知道.latCoord
是一個對象的潛在屬性,因爲系統在任何時候都不知道期望得到Driver
對象。這不會是一個像c + +的大問題?
這一切都必須發生在「成功」,因爲AJAX是異步的。 – PHPglue 2014-10-21 23:03:47
在ajax成功函數完成之前調用'run()',嘗試在回調內移動'run' – andrew 2014-10-21 23:04:09
是不是'{node.latCoord,node.lngCoord}'語法錯誤?嘗試'{lat:node.latCoord,lng:node.lngCoord}' – fgb 2014-10-21 23:08:10