Как я могу использовать несколько переменных для извлечения объектов JS? - PullRequest
2 голосов
/ 16 февраля 2012

Я работаю только над своим третьим проектом Javascript, поэтому на него, вероятно, легко ответить (по крайней мере, я на это надеюсь).

Я научился использовать объект JS вместо массивов.В этом проекте я назвал несколько объектов с вложенной системой идентификаторов следующим образом:

animalia = new Object();
animalia.chordata = new Object();
animalia.chordata.actinopterygii = new Object();
animalia.chordata.actinopterygii.acipenseriformes = new Object();
etc.......

У меня проблемы с вызовом объектов, названных таким образом.Вот мой код:

function expand(event){
    var target = event.target;
    console.log(target);
    var parent = target.parentNode;
    console.log(parent);
    var parentclass = parent.getAttribute("class");
    console.log(parentclass);
    if (parentclass == "kingdom"){
        var newdiv = document.createElement("div");
        var newexpctrl = document.createElement("div");
        var parentid = parent.getAttribute("id");
        console.log(parentid);  
  ----> var parentobj = window[parentid];
        console.log(parentobj);}
    else{
        var upperclass = searchArray(parentclass);
        console.log(upperclass);
        var newdiv = document.createElement("div");
        var newexpctrl = document.createElement("div");
        var parentId = parent.getAttribute("id");
        console.log(parentId);
        var parentnode_ = document.getElementById(parentId);
        console.log(parentnode_);
        var gparentId = parentnode_.parentNode.id;
        console.log(gparentId);
  ----> var parentobj = window[gparentId.parentId];
        console.log(parentobj);
    }
    var childnumb = parentobj.children;
}

У меня проблема с двумя утверждениями, обозначенными "---->".В первом случае использование одной переменной работает для подтягивания нужного объекта.Однако во втором случае, используя две переменные, я не могу получить доступ к нужному объекту.Каков правильный синтаксис для этого?Я пробовал множество различных синтаксических комбинаций, но, похоже, ничего не работает правильно.Или должен ли быть лучший метод для вызова на объектах JS, кроме использования "window [ variable ]"?

PS- Если вы еще не поняли это, я работаюна образовательные инструменты для использования в изучении биологии.Еще раз спасибо stackoverflow, вы, ребята, правила.

Ответы [ 2 ]

3 голосов
/ 16 февраля 2012

Предполагая, что объект окна имеет что-то со свойством, совпадающим со строкой, равной значению gparentId, вы должны быть в состоянии сделать:

var parentobj = window[gparentId][parentId];
0 голосов
/ 16 февраля 2012

Проблема здесь в том, что обозначение в квадратных скобках применяется слишком много.gparentId - это строка.У него нет свойства с именем parentId.Поэтому вы должны сделать это в два этапа.Сначала получите:

window[gparentId]

Затем получите соответствующее свойство этого объекта

var parentobj = window[gparentId][parentId];

На несколько не связанной ноте это не очень хорошо написанный код JavaScript:

Создание объектов

При создании новых объектов всегда используйте следующий синтаксис:

var obj = {};

Это то, что принято считать стандартным, поэтому людям легче читать.

Объявление переменных в операторах If

На самом деле не следует объявлять переменные внутри оператора if, особенно при объявлении той же переменной в блоке else, это действительно сбивает с толку.Вместо этого объявите все переменные в верхней части списка, а затем используйте их без ключевого слова var внизу.

var newdiv = document.createElement("div"),
  newexpctrl = document.createElement("div"),
  parentid = parent.getAttribute("id"),
  parentobj;

Обратите внимание на запятые вместо точек с запятой, что означает, что мне не нужно повторятьключевое слово var.Так как значения newdiv, newexpctrl и parentid в обоих случаях одинаковы, я сразу даю им их значения, что делает содержание оператора if намного короче и проще для восприятия.*

Обратите внимание, что я оставил var _parentId внутри if, так как я думаю, что это, вероятно, улучшает читабельность, но вы можете выбрать его вне if, так как это в любом случае будет загрязнять пространство имен функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...