问答详情
源自:6-3 [JavaScript]this

不能直接object.prototype.tostring(this);吗?

为什么object.prototype.tostring.call(this);这里也要用到call?不能直接object.prototype.tostring(this);吗?

提问者:洋葱onion 2017-04-26 10:33

个回答

  • 禾木89
    2018-04-02 17:42:47

    写一下我的理解

    toString()方法是没有参数的.

    相当于

    var o ={

        toString  :  function(){

                 console.log("无论你传给我什么我都输出这行字.")

        }

    };

    你用到函数toString()的时候,只能o.toString()

    无论是o.toString('99999'),还是o.toString('88888'),对函数输出的结果 没有影响

    所以Object.prototype.toString(this) , 这样写的话对输出结果是没有影响的, 就相当与Object本身在调用他自己的toString()方法

    但是加上call()方法呢,  Object.prototype.toString.call(this), 这实际相当于是用this对象来调用Object的toString()方法

    那么怎么确定this的指向呢?

    由于bar()函数同样没有参数 ,  所以要用call()方法来传入this的值

    如果你这样定义bar函数

    function bar(a) {

        console.log(Object.prototype.toString.call(a));

    };

    那在调用的时候就不需要bar.call()了,直接bar(56789)就行了

    可能还有不对的地方, 能力有限啊


  • 慕粉1823356920
    2018-01-19 22:38:17

    比如下面这段代码:

    function bar(){

    console.log(Object.prototype.toString.call(this));

    console.log(this.toString());

    }

    bar.call(7);

    老师的意思是想输出传给bar作为新的作用域的对象是哪种类型的,比如这里传给bar.call()的是7,这显然是一个number对象,答案自然是object number,如果去掉call直接写成Object.prototype.toString(this),这里的this我认为指向的是Object,所以答案应该是object object 这毫无意义

  • 洋葱onion
    2017-04-26 10:34:00

    多打了 一个tostring。。。手误