繁体   English   中英

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

[英]Why in javascript apply gives different result than direct call?

我有以下代码

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.prototype.toString(d);

Object.prototype转换为string并忽略其参数。

Object.prototype.ToString.apply(d);

d被作为传递thisToString方法(好像d.toString()toStringObject.prototype.toString被称为),这是什么方法方面。

请参见Function#applyObject#toString

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

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

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

另一种解释是, Object.prototype.toString其上运行this对象。 函数的this由你怎么称呼它,当你设置:

Object.prototype.toString();

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

Object.prototype.toString.apply(d);

this是由所引用的对象d (Date对象)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM