为什么在javascript应用中给出与直接调用不同的结果?

时间:2012-11-06 06:27:22

标签: javascript function

我有以下代码

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 ..."

因此“[对象日期]”中的日期来自何处。它是浏览器的本机代码吗?

3 个答案:

答案 0 :(得分:4)

Object.prototype.toString(d);

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

Object.prototype.ToString.apply(d);

dthis方式传递给ToString方法(就好像d.toString() toString引用了Object.prototype.toString一样),是方法所尊重的。

请参阅Function#applyObject#toString

答案 1 :(得分:3)

第一次调用时忽略该参数。您在toString对象上调用Object.prototype方法,基本上与:

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

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

答案 2 :(得分:1)

另一种解释是Object.prototype.toString对其this对象进行操作。函数this由您调用它的方式设置,以便执行:

Object.prototype.toString();

toString函数的thisObject.prototype对象。当你把它称为:

Object.prototype.toString.apply(d);

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