2013-05-14 2 views
1

Это очень поздно, и мой разум сейчас гаснет, но, допустим, у меня есть переменная filename и она хранит имя другой переменной . Переменная является массивом и содержит объект & property position: new google.maps.LatLng(42.2550,-114.3221).Доступ к данным объекта через другое имя переменной

Я глупо пытался получить к нему доступ через filename.position, который, конечно же, возвращает неопределенный, так как он ищет литерал filename для свойства 'position', которого не существует.

Но как я могу вытащить marker.position с помощью filename? Есть ли какой-нибудь изящный трюк jQuery для «разрешения» переменной на ее содержимое? Я голоден. Я знаю, что делал это раньше.

+1

Используйте кронштейн обозначения: 'окно [имя файла] .postion', например. – apsillers

+1

@apsillers Он будет работать * только * в случае, если 'filename' был определен глобально. – VisioN

+1

Duplicate: [Доступ к переменной JavaScript по имени?] (Http://stackoverflow.com/questions/4399794/access-value-of-javascript-variable-by-name) – apsillers

ответ

2

Если это возможно в вашем скрипте, вы можете хранить данные не только в переменной, но и в свойствах какого-либо объекта (обычно удобнее использовать глобальный). Например

var myObj = {}; 
myObj.marker = new google.maps.LatLng(42.2550,-114.3221); // or anything else 

Тогда вы будете иметь возможность получить это свойство, используя переменную так:

myObj[filename].position 

В этом случае я также рекомендую проверить для myObj[filename] существования, используя typeof структуру, просто убедитесь, что такое свойство существует в myObj.

if (typeof myObj[filename] !== "undefined") { 
    // do something 
} 

Как отметил apsillers, вы могли бы использовать глобальный window объект для этого, как хорошо. Но если ваша переменная была определена внутри некоторой другой функции (т.е. не глобальный), вы не сможет получить к нему доступ с window.marker или window[filename], как это будет вне сферы.

Второй способ - использовать функцию eval(), которую я настоятельно рекомендую избегать.

+0

К сожалению, моя переменная была локальной внутри другой функции. Затем мне захотелось получить доступ к нему в отдельной функции jQuery, поэтому мне пришлось перейти на глобальное с «окном». Если бы у меня была дальновидность, ничто из этого не было бы необходимо. Не уверен, как примирить его, не используя глобальные переменные, и я не желаю делать полную переписку для nonce. Несмотря ни на что, спасибо в любом случае! – daveycroqet

0

Попробуйте это:

window[filename].position; 
Смежные вопросы