有一个关于javaScript的call()的问题

function fnMethod(){};
var str = fnMethod.toString();
/**
结果是 "function fnMethod(){}"字符串
/
var str1 = Object.prototype.toString.call(fnMethod);
/
*
结果是检测出了类型 [object Function]
*/
为什么一个是字符串 一个是 类型
想问下 这到底是怎么执行的 这个call 起到了什么作用

对于Object.prototype.toString.call(fnMethod); 简单的来说 call 的作用是 用Object.prototype.toString 来替换 fnMethod 方法

例子

 function add(a,b)  
{  
    alert(a+b);  
}  
function sub(a,b)  
{  
    alert(a-b);  
}  

add.call(sub,3,1);    

call和apply是为了改变函数体内的this指向用的

 function abc(){alert(this)}
abc()//window
abc.call({a:1});//{a:1}这个对象

var str1 = Object.prototype.toString.call(fnMethod);是得到Object对象的toString()返回值,你不传参就是[object Undefined],后面那个应该是参数类型,等价于typeof返回值,并不是调用fnMethod.toString