1

我正在编写一个 JavaScript 实用程序,它允许用户检测特定对象/函数在运行时是否可用。这是源代码,这是可行的,但是每次您想测试另一个对象时都需要对其进行编辑:

<!DOCTYPE html>
<html>
    <head>
        <title>HTML5 Template</title>
        <meta http-equiv="content-type" content="text/html; charset=utf-8">
        <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
        <script type="text/javascript">
            $(document).ready(function() {
                $('#TestObject').click(function() {
                    alert(typeof(HTMLCollection));
                });
            });
        </script>
    </head>
    <body>
        <input id="ObjectType" type="text" />
        <input id="TestObject" type="button" value="Test" />
    </body>
</html>

单击该按钮时,如果项目存在,则显示“对象”或“功能”的警报,如果不存在,则显示“未定义”。

我想要的是有一个文本框<input id="ObjectType" type="text" />,我可以在其中输入要测试的对象,然后单击按钮进行测试,这样就无需继续编辑文档了。这可能吗?有什么类似于我可以使用的反射吗?

4

2 回答 2

3

这是可能的,因为 JavaScript 对象属性实际上是关联的键值对,这obj.property意味着obj['property'].

将此应用于您的问题,以下代码将起作用:

alert(typeof(window[$('#ObjectType').val()]));

这是有效的,因为所有“全局”变量实际上都是window对象的属性。

于 2012-08-22T11:21:00.040 回答
1

您可以通过执行从字符串类名获取对象window[className]。我们将通过从输入文本框中获取类名的字符串值、从类名中获取对象并针对它调用 typeof 来使用它:

保持您的代码相同只需替换alert(typeof(HTMLCollection));alert(typeof(window[$("#ObjectType").val()]));

于 2012-08-22T11:26:54.233 回答