以编程方式将变量和对象名称输出为文字文本字符串

时间:2010-10-16 16:34:34

标签: javascript

我真的想跟踪变量而不在Firebug控制台窗口之间切换或点击这么多,所以我想绘制一个变量名称的运行时查看器及其相应的值,这些值将显示在我正在构建的应用程序的页面上。

我想要两个函数,show(variableName)和freeze(variableName)。它们将输出变量的值和变量或对象的名称作为文字字符串,它将作为查看器中的文本标签。 freeze(variableName)与show(variableName)相同,除了使用setTimeOut计时器跟踪循环。

我确定我遗漏了一些基本的东西,但我还没有找到一种方法来以编程方式获取包含值名称的字符串,因此我可以将其用作标签。我想我可以在运行时之前使用硬编码标签创建表,并在运行时使用值填充它,但我真的想动态生成表,因此它只包含我特别想要显示或冻结的那些变量。简单的功能:

foo1 =“摇滚”; 显示(foo1);

foo2 =“纸”; 显示(foo2的);

foo3 =“剪刀”; 显示(foo3);

应通过getElementById('viewer-table')输出:

<table>\<tr><td>foo1</td><td>Rock</td></tr><tr><td>foo2</td><td>Paper</td></tr><tr><td>foo3</td><td>Scissors</td></tr></table>

我尝试过这个解决方案:

How to convert variable name to string in JavaScript?

和eval()但它对我不起作用......我不知道,难道这不容易吗?感到沮丧...

谢谢, motorhobo

2 个答案:

答案 0 :(得分:0)

我不确定您是否可以实际获取传递给函数的变量的“名称”,原因有两个:

1)变量只是一个标识符。实际上,您可以使用多个标识符来引用完全相同的对象。您(通常)传递该引用,而不是任何实际对象。

2)show / freeze函数将通过函数声明中的命名参数或通过arguments数组引用它们来踩踏标识符名称。

我试图想一想,如果有一些聪明的方法可以在Firefox中使用arguments.callee或stack属性...但是我看不到任何可以根据需要公开参数的内容。

我建议的是简单地将变量的名称及其值添加到一个简单的对象中,并调用其中一个jsDump方法(我更喜欢QUnit中的方法):

function show(o) {
  document.getElementById("viewer-table").innerHTML = QUnit.jsDump(o);
}

// actually use the method
show({"foo1":foo1});

答案 1 :(得分:0)

没有简单的方法来解决这个问题,因为被调用的函数根本不知道变量的原始名称。你甚至无法用反射来解决这个问题(特别是在javascript中),所以你也必须将变量的名称传递给函数。要关注您发布的链接:

function show(varObject)
{
    for(name in varObject)
    {
        alert(name + ": " + varObject[name]);
        // save both name and reference to the variable to a local "to observe array"
    }
}

并用

调用它
var test = "xxx";
show({'test' : test});

在for循环中你可以将简易变量添加到监视器数组并在固定时间间隔内更新你的gui(当一个signle变量改变它的值时你不能注意到。你需要某种全局监视器/观察者你正试图创造)。