Может ли Firebug сообщить мне имя объекта в JavaScript?

StackOverflow https://stackoverflow.com/questions/1800617

  •  05-07-2019
  •  | 
  •  

Вопрос

В последнее время я добавляю на свои страницы довольно много JavaScript, но выучил все это в классической манере «сидеть в штанах».Когда я хочу, чтобы моя страница что-то сделала, я гуглю и экспериментирую, пока не получу желаемый результат.

На моих страницах часто встречаются объекты, которые я хочу активировать/деактивировать, скрыть, показать и т. д., но, пропустив подробное введение в JavaScript, я понятия не имею, как эти объекты называются.Я нажимаю на объекты с открытым Firebug, ожидая увидеть какое-то полное имя объекта, но не получаю никакой радости.Мне просто нужно иметь возможность делать что-то вроде form.button.value="something" и знать имя этого объекта.

Есть идеи?

Спасибо.

Это было полезно?

Решение

Пока вы выполняете код Javascript, у вас есть все локальные переменные в текущей области, поэтому, если у вас есть следующий код:

var myObject = New Object();
myObject.Person = New Object();
myObject.Person.Name = "Mark";
myObject.Person.Gender = "Male";
myObject.Name = "object1";

...вашим корневым объектом будет myObject, и вы ссылаетесь на дочерние объекты через точечную запись.

Однако благодаря реализации DOM в браузере вы также наследуете window объект через this ключевое слово.Фактически, вы можете оставить this ключевое слово для простых ситуаций, т.е.когда вы не используете замыкания.Таким образом, вы можете получить доступ к функциям Javascript на верхнем уровне, просто используя имя функции.

Если вы хотите получить доступ к определенным элементам, как это звучит так, как будто вы этого хотите, вам нужно изучить DOM, а не использовать синтаксис, который вы предлагали (это похоже на Javascript 1990-х годов).Корневой элемент, который вам нужно знать, — это HTMLDocument объект, доступ к которому осуществляется через document свойство.Вы можете обнаружить элементы с конкретными Id (нет Name) атрибуты с помощью getElementById метод элемента документа.Конечно, будет полезно, если вы с самого начала присвоите элементу уникальный идентификатор.Вы также можете рекурсивно использовать childNodes коллекцию для ручного перебора элементов, пока не найдете то, что хотите.В качестве альтернативы, если вы действительно не можете предоставить идентификатор, вы также можете использовать getElementsByTagName метод, который прикреплен к каждому элементу в DOM.

Пример:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
    <TITLE></TITLE>
    <META NAME="Generator" CONTENT="TextPad 4.6">
    <META NAME="Author" CONTENT="?">
    <META NAME="Keywords" CONTENT="?">
    <META NAME="Description" CONTENT="?">
    <SCRIPT LANGUAGE="Javascript">
        <!--

        function DoSummat()
        {
            var divInside = document.getElementById("Inside");
            divInside.textContent = "This text will appear inside.";
        }

        //-->
    </SCRIPT>
</HEAD>

<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#800000" ALINK="#FF00FF" BACKGROUND="?">
<FORM>
    <INPUT TYPE="BUTTON" onclick="DoSummat();" NAME="MyButton" VALUE="Press Me">
</FORM>
<DIV ID="Outside">
    <DIV ID="Middle">
        <DIV ID="Inside"></DIV>
    </DIV>
</DIV>
</BODY>
</HTML>

Другие советы

Элементы обычно идентифицируются с помощью id атрибут.Пример:

<input type="submit" id="saveButton" value="Save" />

Вы можете использовать getElementById метод для получения ссылки на элемент:

var b = document.getElementById('saveButton');
b.value = 'Saving...';

Ну, раз уж ты дал form.button.value="something" Например, я предполагаю, что вы хотите управлять объектами HTML.Вы можете присвоить им идентификатор, например:<form id="my_form"...а затем получить элементы по идентификатору из JS, поскольку функция даже вызывается, getElementById().

document.getElementById('my_form').button.value = 'something';

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

Objects не могут быть «активированы»/«деактивированы», и у них нет «имен» (они могут иметь name имущество, если вы это имеете в виду).

Например, дано:

var foo = {};

foo это переменная у него есть значение, которое является объектом.Объект не является переменной (объект, имеющий «имя»).Данный:

bar = foo; foo = null;

foo сейчас null и объект, который содержал foo, теперь сохраняется как bar.

Вы не сможете этого сделать.Имя переменной не привязано к переменной и не передается между функциями.Лучшее, что вы можете сделать, — это написать функцию, которая принимает строку и преобразует ее обратно в переменную:

function printVar(name) {
    console.log(name + ": " + window[name]);
}

Конечно, есть много что-то не так с этим.Я бы рекомендовал просто сделать два вызова журнала:

console.log("foo");
console.log(foo);

или, используя синтаксис в стиле printf:

console.log("foo: %o", foo);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top