枚举JavaScript对象函数?

时间:2012-01-13 15:18:35

标签: javascript reflection internet-explorer-9

我希望枚举各种JavaScript对象的所有可用函数,甚至是用JavaScript创建的HTML元素。例如,以下在Chrome和FireFox中都很有效:

<html>
    <body>
    <script>

        var object = document.createElement( "select" );

        for( var prop in object )
        {
            document.body.innerHTML += "" + prop + "; // " + typeof object[prop] + "<br/>";
        }

    </script>
    </body>
</html>

这将输出对象的所有属性,包括该对象可用的函数,例如:

...
insertAdjacentHTML; // function
insertAdjacentText; // function
insertAdjacentElement; // function
getAttribute; // function
setAttribute; // function
removeAttribute; // function
getAttributeNode; // function
...

然而,这在IE9中不起作用,你得到的只是字符串/数字/对象属性,而不是任何函数属性。

我的问题是如何在运行时发现IE9中的对象导出了哪些函数名?

非常感谢提前。

更新:添加doctype可以按预期运行。

<!DOCTYPE html>
    <body>
    <script>

        var object = document.createElement( "select" );

        for( var prop in object )
        {
            document.body.innerHTML += "" + prop + "; // " + typeof object[prop] + "<br/>";
        }

    </script>
    </body>
</html>

2 个答案:

答案 0 :(得分:4)

该代码对我来说很好,在IE9中可以正常工作。

http://jsbin.com/ivukus/edit#preview

答案 1 :(得分:2)

如果指定DOCTYPE,这将在IE中正常工作。如果没有DOCTYPE,IE将呈现Quirks Mode,这实际上是IE 5.5的行为,这将极大地影响IE的Javascript支持。

<!doctype html>
<html>
    <body>
    <script>

        var object = document.createElement( "select" );

        for( var prop in object )
        {
            document.body.innerHTML += "" + prop + "; // " + typeof object[prop] + "<br/>";
        }

    </script>
    </body>
</html>

结果:

form; // object
length; // number
multiple; // boolean
name; // string
options; // object
selectedIndex; // number
size; // number
type; // string
value; // string
dataFld; // string
dataFormatAs; // string
dataSrc; // string
add; // function
item; // function
namedItem; // function
remove; // function
.
.
.