被面试官问
为什么先toString后call
call在这里的作用是什么
(一般call是绑定this,面试官说的意思好像是call这里不是绑定的意思,问我call在这里的作用是什么)
被面试官问
为什么先toString后call
call在这里的作用是什么
(一般call是绑定this,面试官说的意思好像是call这里不是绑定的意思,问我call在这里的作用是什么)
Object.prototype.toString 是一个函数,call是函数对象上的一个方法。Func.call(null,a,b,c).函数使用call方法一般有两个作用,一是指定这个函数的this指向(call的第一个参数),二是传递参数(a,b,c)
拆开看,Object.prototype.toString
这是一个 Function 对象,而 Function 对象原型链上又有 Function.prototype.call
。
如果 Function.prototype.call
(与之一同常出现的还有 Function.prototype.apply
)是干啥的你都不清楚的话,再多学习学习吧,百度一下 JS 中 call/apply
大把结果。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
先说这个代码的作用,是获取
obj
的类型的。然后说一下为什么这样写:
为什么不直接调用
obj.toString()
,这是因为各种类型都会对toString
的重新实现,比如:所以,无法直接调用
toString
来判断类型。那为什么不用
typeof
?我们再看typeof
的效果:可以看到,
null
,[]
,new Date()
,{}
根本无法区分。再说
Object.prototype.toString
这个方法,这个是在Object原型链
上的方法,就是最原始的那个实现,不会被obj
的实现所影响,也不会因为obj
的值而报异常,再来看看效果:可以看出,这个方法可以真实反映
obj
的具体类型。所以,这里虽然使用了
call
,但是考查点却跟call
没有关系。call
的作用就是让obj
能够调用Object原型链
上的toString
方法。