当我在控制台中测试时,这是我在阅读的一些代码中找到的东西:
Object.prototype.toString("foo"); // output: "[object Object]" Object.prototype.toString.call("foo"); // output: "[object String]"
我想我可能有一个微弱的想法,但我无法用语言表达......有人可以解释一下吗?
答案 0 :(得分:4)
两次通话 NOT 等效。
第一个电话:
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]
< / 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