您首先需要了解如何this根据调用函数的方式更改值。
首先,我们有成员函数。Object.prototype.toString是 的成员函数Object.prototype。您可以将其简单地想象为:
Object.prototype = {
toString: function() {} // is responsible for converting an object to it's string representation
};
当调用成员函数时,上下文this引用父对象(的实例Object)。随着内置 JS 对象的扩展Object,它们都可以使用.toString()不同的结果:
(new Object).toString(); // [object Object]
(new String).toString(); // [object String]
它有助于想象 的内部运作.toString(),你会想象它可能会做类似的事情:
// ..
return '[object '+ this.constructor.name + ']';
// ..
希望您现在可以想象更改this函数中的值将如何更改正在检查的对象。
当您Object.prototype.toString通过 .call() 调用时,您可以传递一个新值用作this:
Object.prototype.toString.call(new Date); // [object Date]
this我强烈推荐阅读 Yehuda Katz 对调用函数时影响值的 3 种方式的简单解释:
http://yehudakatz.com/2011/08/11/understanding-javascript-function-invocation-and-this/