Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么使用原型的javascript代码可以工作?_Javascript_Prototype - Fatal编程技术网

为什么使用原型的javascript代码可以工作?

为什么使用原型的javascript代码可以工作?,javascript,prototype,Javascript,Prototype,我有以下javascript代码: <!doctype html> <html lang="en"> <head> <meta charset="utf-8" /> <title></title> <script> function Person(first, last) { this.first =

我有以下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>

职能人员(第一,最后){
this.first=first;
this.last=last;
}
Person.prototype.toString=函数(){
返回this.first+this.last;
}
var person=新人(“约翰”、“面团”);
警惕(人);//警报调用toString()后的结果相同

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

当使用
alert
时,该方法隐式地尝试调用对象上的
toString
。在您的情况下,
toString
是定义的,并在显式调用
toString
时执行您期望的操作。如果您没有定义
toString
alert
将使用
对象的本机
toString
方法,并返回“[Object Object]”,正如@FelixKling所指出的。

当使用
alert
时,该方法会隐式地尝试调用对象上的
toString
。在您的情况下,
toString
是定义的,并在显式调用
toString
时执行您期望的操作。如果没有定义
toString
alert
会使用
对象的本机
toString
方法,并返回“[Object Object]”,正如@FelixKling所指出的。

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

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

代码中的注释没有回答您的问题吗?
alert
调用传递对象的
toString()
,就像注释所说的:alert调用toString()。而
toString
在原型上被覆盖以连接名字和姓氏。代码中的注释没有回答您的问题吗?
alert
调用传递对象的
toString()
,就像注释所说的:alert调用toString()。而
toString
在原型上被覆盖以连接名字和姓氏。对象的默认字符串表示形式是
[object object]
。这就是你会看到的。示例:。@FelixKling是的,谢谢。我不知道为什么我没有想到,或者用小提琴或其他什么东西试过。伊恩,我想我明白了。如果我删除了toString方法,那么警报函数将向对象发出警报。如果我将方法更改为ToString,警报将再次使用object。只有因为定义了toString,警报才回复JohnDough,而且仅仅是因为这个原因?@jimdif是的,仅仅因为您定义了它,它基本上“覆盖”了返回“[object object]”的本机实现。对象的默认字符串表示形式是
[object object]
。这就是你会看到的。示例:。@FelixKling是的,谢谢。我不知道为什么我没有想到,或者用小提琴或其他什么东西试过。伊恩,我想我明白了。如果我删除了toString方法,那么警报函数将向对象发出警报。如果我将方法更改为ToString,警报将再次使用object。仅仅因为定义了toString,警报就回复了JohnDough,并且仅仅是出于这个原因?@jimdif是的,仅仅因为您定义了它,它基本上“覆盖”了返回“[object]”的本机实现Ashley我不确定您所说的是否正确。如果toString方法不存在,则不会通过prototype声明通知名称JohnDough。如果没有,那么object被提醒,而不是JohnDough。艾希礼,我不确定你说的是否正确。如果toString方法不存在,则不会通过prototype声明通知名称JohnDough。如果没有,则会提醒object,而不是JohnDough。