为什么Object.prototype.toString.call()提供的输出与Object.prototype.toString()不同?

时间:2013-10-15 14:38:27

标签: javascript

当我在控制台中测试时,这是我在阅读的一些代码中找到的东西:

Object.prototype.toString("foo"); // output: "[object Object]"

Object.prototype.toString.call("foo"); // output: "[object String]"

我想我可能有一个微弱的想法,但我无法用语言表达......有人可以解释一下吗?

2 个答案:

答案 0 :(得分:4)

两次通话 NOT 等效。

第一个电话:

Object.prototype.toString("foo");

toString的上下文中调用Object.prototype方法,并附加"foo"参数(未使用),Object.prototypeObject,因此结果是[object Object]

第二个电话:

Object.prototype.toString.call("foo");

toString的上下文中调用"foo"方法,Object.prototype.toString从中构建一个对象(new String("foo")),结果为[object String] < / p>

答案 1 :(得分:0)

call的第一个参数是函数内的this对象,而不是函数的第一个参数:

"use strict";
function test(a,b) {
  console.log(this, a, b);
};
var obj = {
  'func' : test
}
test(1,2) // outputs undefined 1 2
test.call(1,2); // outputs 1 2 undefined
obj.func(1,2) // outputs obj 1 2
obj.func.call(1,2) // outputs 1 2 undefined