【问题标题】:Can firebug tell me the javascript name of an object?firebug 可以告诉我对象的 javascript 名称吗?
【发布时间】:2009-11-25 23:18:25
【问题描述】:

我最近在我的页面中添加了相当多的 javascript,但我都以经典的坐式风格学习了这一切。当我想让我的页面做某事时,我会用谷歌搜索并进行实验,直到得到我想要的结果。

我的页面中经常有我想要激活/停用、隐藏、显示等的对象,但是 - 错过了对 javascript 的严格介绍 - 我不知道这些东西是如何命名的。我在打开 firebug 的情况下单击对象,期望看到该对象的一些完全限定名称,但没有得到任何乐趣。我只需要能够执行 form.button.value="something" 之类的操作,并且需要知道该对象的名称。

有什么想法吗?

谢谢。

【问题讨论】:

  • 在 JavaScript 中,甚至函数也可以是匿名的。你能用一些代码解释你在做什么吗?

标签: javascript firebug names


【解决方案1】:

当您运行 Javascript 代码时,您拥有当前范围内的所有局部变量,所以如果您有以下代码:

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

...您的根对象将是 myObject,并且您通过点表示法引用后代对象。

但是,由于在浏览器中实现了 DOM,您还可以通过 this 关键字继承 window 对象。事实上,您可以将 this 关键字留在简单的情况下,即当您不使用闭包时。因此,您只需使用函数名即可访问顶层的 Javascript 函数。

如果您想访问特定元素,就像您想要的那样,您需要学习 DOM,而不是使用您建议的语法(听起来像 1990 年代的 Javascript)。您需要知道的根元素是 HTMLDocument 对象,可通过 document 属性访问。您可以使用文档元素的getElementById 方法发现具有特定Id(不是Name)属性的元素。当然,如果您从一开始就为您的元素提供了一个唯一的 ID,这会有所帮助。您还可以递归地使用childNodes 集合手动迭代元素,直到找到您想要的。或者,如果您确实无法提供 Id,您也可以使用 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>

【讨论】:

    【解决方案2】:

    元素通常使用id 属性来标识。示例:

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

    您可以使用getElementById 方法获取对元素的引用:

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

    【讨论】:

      【解决方案3】:

      既然你给出了form.button.value="something" 的例子,我猜你想控制HTML 对象。您可以为它们分配一个 id,例如:

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

      【讨论】:

        【解决方案4】:

        你的问题非常模糊,所以我不能给你你需要的答案。

        Objects 不能被“激活”/“停用”,而且它们没有“名称”(如果你是这个意思,它们可以有 name 属性)。

        例如,给定:

        var foo = {};
        

        foo 是一个变量,它的值恰好是一个对象。对象不是变量(具有“名称”的对象)。给定:

        bar = foo; foo = null;
        

        foo 现在是null,foo 持有的对象现在存储为bar

        【讨论】:

          【解决方案5】:

          您将无法做到这一点。变量名不与变量绑定,也不在函数之间传递。您能做的最好的事情就是编写一个函数来获取一个字符串并将其解析回一个变量:

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

          当然,这有很多问题。我建议只进行两次日志记录调用:

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

          或者,使用 printf 风格的语法:

          console.log("foo: %o", foo);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-01-01
            • 1970-01-01
            • 2011-08-14
            • 1970-01-01
            • 2015-08-10
            • 1970-01-01
            相关资源
            最近更新 更多