为什么使用原型的javascript代码可以工作?
我有以下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 =
<!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。