打印数组中包含的Javascript对象的名称

时间:2014-01-31 21:59:45

标签: javascript

我创建了一个名为Location的对象:

function Location(street,city,postal,phone,fax, lat, lon, distance){
    this.street = street;
    this.city = city;
    this.postal = postal;
    this.phone = phone;
    this.fax = fax;
    this.lat = lat;
    this.lon = lon;
    this.distance = distance;
}

然后构建每个对象:

example1 = new Locaiton('value', 'value', etc)
example2 etc etc

然后将对象存储在数组

var cities = [example1, example2]

我尝试使用cities[0].constructor.name,但这只是打印出位置。

如何打印“example1”以便我可以将它与if语句中的匹配元素id进行比较?

6 个答案:

答案 0 :(得分:3)

example1是对Location对象的引用,JavaScript没有做你想做的事情的概念。

如果你真的需要这个名字,我会把它存放在你的对象上。

答案 1 :(得分:3)

对象不能对引用它们的变量进行任何反向引用。考虑一下:

var example1 = new Location(...);
var example2 = example1;

现在有一个由两个变量命名的位置,您希望" name"是吗?

答案 2 :(得分:0)

我建议您将这组位置存储为数组,然后将其存储为对象。您似乎正在尝试将城市名称与位置数据结合使用。

您可以为城市使用这样的数据结构:

var cities = {
    "london": example1,
    "lisbon": example2
}

然后你可以这样做:

cities.london.name

您必须在位置功能定义的末尾添加return this

答案 3 :(得分:0)

你无法做你想做的事。 JavaScript中的对象通常通过引用而不是值来使用。例如,如果你使用了:

var ex1 = new Location();
var ex2 = ex1;
var ex3 = ex1;

然后,所有这三个变量(ex1ex2ex3)都指的是完全相同的对象。即使语言试图允许,对象也无法选择一个。

答案 4 :(得分:0)

您可以将对象存储在另一个动态对象中,然后使用“变量名称”作为键,但我并不是百分之百确定这会给您带来多少收益。方法是:

var examples = {};
examples["example1"] = new Location('value', 'value', etc);
examples["example2"] = etc etc

此时,您将能够访问与当前对象关联的密钥。问题是,您必须能够访问密钥才能访问该对象,因此,就像我说的那样,我不确定它能为您带来多少钱。 。

注意: Chris Alexander和Jay建议采用类似方法。 。

答案 5 :(得分:0)

您希望它打印出它出现的变量的名称。这实际上是不可能的。

如果您需要这样做,您有几个选择。两个最佳选择可能是:

1)在Location中添加某种名称功能。然后添加一个返回字符串的“toString()”函数。然后,如果你在需要将它转换为字符串的地方使用它,它将使用toString的输出。

2)不要将它们存储在数组中,而是将它们存储在一个对象中,其中键是您想要的名称。然后你可以改用密钥。

var locations = {
    example1: new Location(),
    example2: new Location()
}

for (var name in locations) { console.log(name); } // logs "example1" and "example2"