您首先需要了解如何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/