1.call和apply都是为了改变某个函数运行时的上下文而存在的
2.也就是改变函数体内this的指向。
3.二者的作用完全一样,只是接受参数的方式不太一样。
4.call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里
例如:
func1 定义如下:
var func1 = function(arg1, arg2) {};
call方式:
func1.call(this, arg1, arg2);
apply方式
func1.apply(this, [arg1, arg2]);
一个应用:
function classof(obj){
if(obj===null){
return "NULL"
}
if(obj===undefined){
return "Undefined"
}
return Object.prototype.toString.call(obj).slice(8,-1)
}
通过Object.prototype.toString.call调用对象的方法,返回字符串,然后从字符串中截取出对象的真实类型
说明:
1.toString方法是object这个对象的方法,js中的每个对象都继承于object
2.object的toString方法会返回[object Object]这样的字符串,其中8到倒数第二位为类型
3.很多JS中的类都重写了toString方法,所以返回的形式就不一定是2中规定的那样了
4.利用Object.prototype.toString.call调用