簡體   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