调用意外警报

时间:2011-05-03 10:45:52

标签: javascript

我在页面上有以下简单的脚本

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Untitled Page</title>
    <script type="text/javascript">
        var nsTest = function ()
        {
            var test = function ()
            {
                alert('nsTest.test');
            }

            var test2 = function ()
            {
                alert('nsTest.test2');
            }

            return {
                test: test,
                test2: test2
            }
        } ();

        function t()
        {
            alert(nsTest.test());
        }

        function t2()
        {
            alert(nsTest.test2());
        }
    </script>
</head>
<body>
    <input type="button" value="test" onclick="t()" />
    <input type="button" value="test2" onclick="t2()" />
</body>
</html>

当我点击其中一个按钮时,我会在screent上看到预期的警报,然后是第二个显示“未定义”的警告。

这发生在IE8和FF3中。 有什么想法发生了什么?

谢谢,

大卫

3 个答案:

答案 0 :(得分:3)

你说两次警告。 你不需要说

警报(nsTest.test2());

你只需要调用nsTest.test2();

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Untitled Page</title>
    <script type="text/javascript">
        var nsTest = function ()
        {
            var test = function ()
            {
                alert('nsTest.test');
            }

            var test2 = function ()
            {
                alert('nsTest.test2');
            }

            return {
                test: test,
                test2: test2
            }
        }();

        function t()
        {
            nsTest.test();
        }

        function t2()
        {
            nsTest.test2();
        }
    </script>
</head>
<body>
    <input type="button" value="test" onclick="t()" />
    <input type="button" value="test2" onclick="t2()" />
</body>
</html>

实际上你甚至不需要函数t1和t2你可以直接使用你的onclick引用nsTest.test2(),如下所示http://jsbin.com/ageva5/2/edit

答案 1 :(得分:1)

您致电t(),呼叫nsTest.test() ...

nsTest.test()警告字符串'nsTest.test',然后没有返回值,因此返回undefined

... t()然后收到返回值并提醒它。

答案 2 :(得分:1)

首先运行nsTest中的警报,然后运行t()和t2()中的警报。这些警报会警告nsTest的返回值。*。这些值未定义。删除这些警报只能获得第一个警报。