2013-07-21 139 views
2

我看到underscore.js.Object.prototype.toString()的用途是什麼?

這是此代碼,應用了別名:

toString = ObjProto.toString, 

但是,要使用的toString它也直接存取方式,瓦特/輸出使用上面的代碼在所有。

toString() 

嘗試一下在它工作正常的控制檯。在直接代碼中試用它,它也可以正常工作。我的猜測是,舊的瀏覽器可能不會以這種方式訪問​​它。

我如何進一步觀察?

Caniuse沒有關於它的信息。

Google拉起沒有用的前10個左右命中。

因爲它是Object.prototype,它是由從對象繼承(只有那些繼承,並不是所有的全局對象)全局對象,如號碼訪問。

但我的意思是,它也可以直接訪問,而不必使用全局對象實例。

toString(some_var); 

這裏是一個SO Q/A這表明window.toString不是在所有的瀏覽器支持,這是爲什麼。

回答

6

全局對象從對象繼承,

這是一個錯誤的假設,global objects are host objects他們可以繼承任何他們想要的或者根本沒有任何繼承。例如代碼在IE10中不起作用。

特別toString存儲在Object.prototype上的方法是唯一一個返回內部類名稱的肯定方法。函數,數組,數字等不會繼承Object.prototypetoString方法,但會定義它們的自己的toString方法,如Number.prototype.toString !== Object.prototype.toString中所述。

+0

窗口不從Object繼承。這不是假設,這是事實。例如,從Object繼承的數字。窗口沒有。那有意義嗎?你瞭解我所取得的資格嗎? –

+1

@stack_temp你聲稱全局對象是從Object繼承的,這就是我所引用的。 – Esailija

+0

'是唯一一個返回肯定的內部類名'這是不正確的。它可以被重寫。 – freakish