洋葱onion
2017-04-26 10:33
为什么object.prototype.tostring.call(this);这里也要用到call?不能直接object.prototype.tostring(this);吗?
写一下我的理解
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)就行了
可能还有不对的地方, 能力有限啊
比如下面这段代码:
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 这毫无意义
多打了 一个tostring。。。手误
JavaScript深入浅出
281100 学习 · 1020 问题
相似问题