我有以下代码
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 ..."
因此“[对象日期]”中的日期来自何处。它是浏览器的本机代码吗?
答案 0 :(得分:4)
Object.prototype.toString(d);
将Object.prototype
转换为字符串并忽略其参数。在
Object.prototype.ToString.apply(d);
d
以this
方式传递给ToString
方法(就好像d.toString()
toString
引用了Object.prototype.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
函数的this
是Object.prototype
对象。当你把它称为:
Object.prototype.toString.apply(d);
this
是d
引用的对象(Date对象)。