美文网首页
Object.prototype.toString.call()

Object.prototype.toString.call()

作者: 小龙虾Julian | 来源:发表于2020-04-14 11:19 被阅读0次

    1、toString()方法和Object.prototype.toString.call()方法对比

    var arr = [1,2];
    //直接对一个数组调用toString()
    arr.toString();     // "1,2"
    //通过call指定arr数组为Object.prototype对象中的toString方法的上下文
    Object.prototype.toString.call(arr);     //"[object Array]"
    

    Object.prototype.toString()本身是允许被修改的,数组的toString()方法实际上是Object.prototype.toString()重写后的方法,并不是Object.prototype中的toString(),Object.prototype.toString()方法使用来判断数据类型的,如:

    Object.prototype.toString.call(arr);     //"[object Array]"  判断是否是数组
    

    而重写后的toString()方法可以把数组转换为字符串,如:

    [1,2].toString();     // "1,2" 
    

    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()直接调用。如:

    var arr = [1,2];
    console.log(Object.prototype.toString.call(arr));     //[object Array]
    console.log(Array.prototype.toString.call(arr));     "1,2"
    

    3、原型链——js中的对象都继承自Object,所以当在某个对象上调用一个方法时,会先在该对象上进行查找,如果没找到则会进入对象的原型(也就是.prototype)进行查找,如果没找到,同样的也会进入对象的原型的原型进行查找,直到找到或者进入原型链的顶端Object.prototype才会停止。

    相关文章

      网友评论

          本文标题:Object.prototype.toString.call()

          本文链接:https://www.haomeiwen.com/subject/uudzmhtx.html