1

这是我在控制台中测试时在阅读的一些代码中发现的内容:

Object.prototype.toString("foo"); // 输出:“[对象对象]”

Object.prototype.toString.call("foo"); // 输出:“[对象字符串]”

我想我可能有一个模糊的想法,但我无法用语言表达......谁能解释一下?

4

2 回答 2

4

这两个调用是等价的。

第一次调用:

Object.prototype.toString("foo");

toString在 的上下文中调用该方法Object.prototype,带有一个附加"foo"参数(未使用),并且Object.prototype是一个Object,所以结果是[object Object]

第二次调用:

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

toString在 的上下文中调用该方法"foo",并Object.prototype.toString从中构建一个对象 ( new String("foo")),因此结果是[object String]

于 2013-10-15T14:41:42.367 回答
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
于 2013-10-15T14:41:23.520 回答