为什么这个javascript代码使用原型工作?

时间:2013-01-15 15:03:53

标签: javascript prototype

我在下面有这个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)不应该显示任何内容。

2 个答案:

答案 0 :(得分:5)

使用alert时,该方法会隐式尝试在对象上调用toString。在您的情况下,toString已定义,并在明确调用toString时执行您所期望的操作。如果您尚未定义toString,则alert将使用toString的本地Object方法并返回“[object Object]”,如@FelixKling所指出的

答案 1 :(得分:1)

这是因为该对象具有toString()方法。 alert()需要一个字符串,并且如果对象存在则将使用此方法,否则将使用自己的内置字符。这里的方法返回forename和surname,这就是你在alert()对话框中得到的。