4

我有以下代码

var d = new Date();
Object.prototype.toString(d); //outputs  "[object Object]"
Object.prototype.toString.apply(d); //outputs "[object Date]"

为什么会有这种差异以及发生了什么?

编辑:

d.toString() // outputs "Tue Nov 06 2012 ..."

那么“[object Date]”中的日期是从哪里来的。是浏览器的本机代码起作用吗?

4

3 回答 3

4
Object.prototype.toString(d);

转换Object.prototype为字符串并忽略其参数。在

Object.prototype.ToString.apply(d);

d被传递thisToString方法(就像引用d.toString()被调用一样),这是方法所尊重的。toStringObject.prototype.toString

Function#applyObject#toString

于 2012-11-06T06:31:07.313 回答
3

该参数在第一次调用中被忽略。您toString在对象上调用该方法Object.prototype,基本上与以下内容相同:

{}.toString(); //outputs  "[object Object]"

在第二次调用中,您正在调用toString方法,Object但将Date对象用作其上下文。该方法将对象的类型作为字符串返回,与将对象的值作为字符串返回的对象的toString方法进行比较。DateDate

于 2012-11-06T06:37:21.247 回答
1

另一种解释是Object.prototype.toString对其this对象进行操作。一个函数this是由你如何调用它来设置的,所以当你这样做时:

Object.prototype.toString();

toString函数是this对象Object.prototype。当您将其称为:

Object.prototype.toString.apply(d);

thisd(一个 Date 对象)引用的对象。

于 2012-11-06T06:57:21.603 回答