gpt4 book ai didi

javascript - 在另一个函数中访问对象属性

转载 作者:行者123 更新时间:2023-12-03 11:36:15 24 4
gpt4 key购买 nike

我已经阅读了大量发布的问题,但找不到我的问题的答案。我使用 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(){}; 语法为 Driver 对象构建函数。一切都很好。

然后我声明一个全局变量 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意外。” 。有没有办法将 node 转换为驱动程序?没有更大规模的命名空间来包装这一切是否存在问题?还是我对问题的看法完全困惑?

感谢 @fgb 的见解,他认为问题是 Google map 语法问题。对于那些指出 AJAX 异步效果的人,我知道这与我遇到的问题无关。为了简单起见,我删除了大量代码,并排除了许多其他 ajax 调用,并将 run() fxn 直接放入其中。

但是,我原来的问题仍然存在,尽管有所改变。为什么这有效?我本以为,因为对象及其属性是在不同的函数中定义的,所以 run 函数不会知道 .latCoord 是对象的潜在属性,因为系统在任何时候都不知道需要一个 Driver 对象。这对于 c++ 之类的东西来说不是一个大问题吗?

最佳答案

你可以在其他地方定义一个构造函数,但是一旦你用它创建了一个对象,你最终会得到一个独立的对象。该对象知道它具有哪些属性,并且不需要在任何地方进行单独的定义。这与 C++ 等语言不同,在 C++ 中您需要访问类定义才能使用实例。

JavaScript 中的类型比其他一些语言中的类型更灵活。它的概念是duck typing其中对象的类型是根据它们的使用方式隐式定义的,而不是严格的类型定义。

因此,您可以将一些对象文字(如 { latCoord: 5, lngCoord: 10, driverName: 'Name' })放入 FULL_LIST 中,然后 run 函数将以与构造函数创建对象相同的方式使用它们。

关于javascript - 在另一个函数中访问对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26497765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com