2014-01-31 3 views
2

Я создал объект под названием Расположение:Печать название объекта Javascript содержится в массиве

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?

+1

Зачем вам это нужно? –

+4

Вы не можете этого сделать. Если вы не сохраните имя переменной где-то, вы не сможете ее получить. –

+0

@ p.s.w.g только что отредактирован для объяснения –

ответ

3

example1 является ссылкой на ваш объект местоположения, а JavaScript не имеет понятия делать то, что вы хотите сделать.

Если вам действительно нужно имя, я бы сохранил его на вашем объекте.

3

Объекты не имеют обратной ссылки на переменные, которые относятся к ним. Рассмотрите это:

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

Теперь есть одно место, названное двумя переменными, что вы ожидаете от имени?

0

Могу ли я предположить, что, сохраняя множество мест в виде массива, вы храните его как объект. Кажется, вы пытаетесь сохранить название города в сочетании с данными о местоположении.

Вы можете использовать структуру данных, как это для городов:

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

Вы можете сделать:

cities.london.name 

Вы должны добавить return this к концу определения функции Местоположения.

0

Вы не можете делать то, что хотите. Объекты в JavaScript обычно используются по ссылке, а не по значению. Так, например, если вы использовали:

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

Тогда все три из этих переменных (ex1, ex2 и ex3) имеют в виду тот же объект. Невозможно, чтобы объект мог выбрать один, даже если язык пытался его разрешить.

0

Вы можете сохранить объекты в другом динамическом объекте, а затем использовать «имя переменной» в качестве ключа, но я не уверен на 100%, что вы много покупаете. Подход будет таким:

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

В этот момент вы сможете получить доступ к ключу, связанному с текущим объектом. Дело в том, что вам нужно будет иметь доступ к ключу, чтобы добраться до объекта, так что, как я уже сказал, я не уверен, сколько вы его покупаете. , ,

Примечание: Крис Александр и Джей предлагают аналогичные подходы. , ,

+0

Вот почему я упомянул вас (и Криса) внизу. , , видимо, мы все печатали в одно и то же время. :) – talemyn

0

Вы хотите распечатать имя переменной, которая будет отображаться. Это невозможно.

Если вам нужно это сделать, у вас есть несколько вариантов. Возможны два наилучших варианта:

1) Добавьте в местоположение какую-то функцию имени. Затем добавьте функцию «toString()», которая возвращает строку. Затем, если вы используете его в тех местах, где ему нужно преобразовать его в строку, он будет использовать все, что выводит toString.

2) Вместо того, чтобы хранить их в массиве, храните их в объекте, где ключ - это имя, которое вы хотите. Затем вы можете использовать ключ.

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

for (var name in locations) { console.log(name); } // logs "example1" and "example2" 
Смежные вопросы