这是我在控制台中测试时在阅读的一些代码中发现的内容:
Object.prototype.toString("foo"); // 输出:“[对象对象]”
Object.prototype.toString.call("foo"); // 输出:“[对象字符串]”
我想我可能有一个模糊的想法,但我无法用语言表达......谁能解释一下?
这是我在控制台中测试时在阅读的一些代码中发现的内容:
Object.prototype.toString("foo"); // 输出:“[对象对象]”
Object.prototype.toString.call("foo"); // 输出:“[对象字符串]”
我想我可能有一个模糊的想法,但我无法用语言表达......谁能解释一下?
这两个调用是不等价的。
第一次调用:
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]
的第一个参数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