Object.prototype.toString()本身是允許被修改的,數組的toString()方法實際上是Object.prototype.toString()重寫後的方法,並不是Object.prototype中的toString(),Object.prototype.toString()方法使用來判斷數據類型的,如:
而重寫後的toString()方法可以把數組轉換為字符串,如:
2、事實上只有Object.prototype上的toString才能用來進行復雜數據類型的判斷,而數組的toString()方法是重寫了Object.prototype的toString()方法,所以當使用arr.toString()時,不能進行復雜數據類型的判斷,因為它調用的是Array.prototype.toString,雖然Array也繼承自Object,但此時數組的toString()方法是js在Array.prototype上重寫了toString(也就是為我們提供的現成的將數組轉換為字符串的方法),而我們通過toString.call(arr)實際上是通過原型鏈調用了Object.prototype.toString,當然也可以直接使用 arr.toString()直接調用。如:
3、原型鏈——js中的對象都繼承自Object,所以當在某個對象上調用壹個方法時,會先在該對象上進行查找,如果沒找到則會進入對象的原型(也就是.prototype)進行查找,如果沒找到,同樣的也會進入對象的原型的原型進行查找,直到找到或者進入原型鏈的頂端Object.prototype才會停止。