这是我在控制台中测试时在阅读的一些代码中发现的内容:
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