我一直在阅读大量的问题,无法找到我的问题的答案。我已经使用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