javascript - строка для реального объекта - PullRequest
0 голосов
/ 22 ноября 2011

У меня есть объекты javascript var flower_1; var flower_2;

У меня вопрос, есть ли у меня другая переменная, например, String var Name;

И скажем, например: Name = "flower_1";

Как я могу изменить Name переменную в объект "flower_1"

Ответы [ 2 ]

5 голосов
/ 22 ноября 2011

Если я правильно понимаю ваш вопрос, у вас есть что-то вроде этого:

function foo() {
    var flower_1 = { /* ... */ };
    var flower_2 = { /* ... */ };
    var name = "flower_1";

    var target = /* code here to get the correct object based on `name` */;
}

Вы можете сделать это, но этого следует избегать, если это вообще возможно:

var target = eval(name);

eval - очень большой и легко используемый инструмент, которого следует избегать.Мне никогда не приходилось использовать его в производственном коде за несколько лет разработки JavaScript.Также обратите внимание, что eval не разрешено в новом «строгом» режиме языка (одно из многих улучшений, которое приносит строгий режим).

В этом конкретном случае этого довольно легко избежать:

function foo() {
    var objects = {
        flower_1: { /* ... */ },
        flower_2: { /* ... */ }
    };
    var name = "flower_1";

    var target = objects[name];
}

Теперь flower_1 и flower_2 являются свойствами объекта, и вы можете использовать обозначение в скобках ([]) со строковым именем для доступа к этим свойствам,Это связано с тем, что в объектах JavaScript вы можете получить доступ к свойству с помощью точечной нотации и литерала (например, obj.foo) или с помощью нотации в скобках и строки (например, obj["foo"]).Во втором случае строка не обязательно должна быть строковым литералом, она может быть результатом выражения, включая (как в этом случае) извлечение строки из переменной.

Вотживой пример обоих методов.

Обратите внимание, что если ваши операторы var являются глобальными, то эти переменные становятся свойствами глобального объекта, который в веб-браузерах равен window, поэтому если они глобальные, вы можете получить к ним доступ через window[name] по той же причине, по которой objects[name] работает.Но лучше избегать глобальных переменных (если это возможно, полностью, или указывать только одну с хорошим уникальным именем, которая затем при необходимости содержит все ваши общедоступные материалы - например, если внешний код должен иметь доступ к вашим материалам).

0 голосов
/ 22 ноября 2011

Вы можете использовать функцию eval():

var flower_1 = "abc";
var name = "flower_1";

var x = eval(name); // = "abc"

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

Лучшим (и гораздо более рекомендуемым) решением будет использование ассоциативного массива:

var name = "flower_1";
var arr = new Array();
arr["flower_1"] = "abc";

var x = arr[name]; // = "abc"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...