Object.prototype.toString.call()、Array.prototype.toString.call()、toString()

如题所述

第1个回答  2022-07-26
1、toString()方法和Object.prototype.toString.call()方法对比

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才会停止。
相似回答