0

我在下面有这个javascript代码:

<!doctype html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title></title>

        <script>
            function Person(first, last) {
                this.first = first;
                this.last  = last;
            }

           Person.prototype.toString = function() { 
                return this.first + this.last;
           }
            var person = new Person("John", "Dough");

            alert(person); // same result since alert calls toString()  

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

问题是为什么alert(person)显示“JohnDough”?对我来说,alert(person) 不应该显示任何东西。

4

2 回答 2

5

使用 时alert,该方法会隐式尝试toString在对象上调用 a 。在您的情况下,toString已定义并在显式调用toString. 正如@FelixKling 所指出的,如果您没有定义toStringalert就会使用toStringan 的本机方法并返回“[object Object]”。Object

于 2013-01-15T15:06:39.670 回答
1

这是因为该对象有一个 toString() 方法。alert() 需要一个字符串,如果对象存在则使用此方法,否则将使用它自己的内置方法。由于这里的方法返回名字和姓氏,这就是您在 alert() 对话框中得到的。

于 2013-01-15T15:07:02.463 回答