覆盖 toString 函数

Overwriting toString function

function toString(obj) {
        return {}.toString.call(obj);
    }

我在一些开源 javascript 项目中看到了这个功能。这个函数的用途是什么?

让我们依次来看每个组件:

return: returns call 函数的任意值 returns.

{}: 这声明了一个空对象。

.toString: 每个对象上的 toString 函数。

.call:方法调用具有给定 this 值的函数(参见 MDN Documentation)。在这种情况下,this 是传递给 toString 函数的 obj

当用于数字和字符串时,它会产生类似 [object Number][object String] 的结果,但它的确切用途取决于它的使用方式。

在您正在查看的代码中查找其用法示例,这应该能让您更好地了解它的用途。

它可以用作识别未知变量类型的方法,是 typeof 更复杂的替代方法,因为它 returns 结果类似于 [object HTMLBodyElement]

给你 'what'。 'why' 是:在输入对象上使用基础 Object.toString(),即使该对象自己的原型具有更特殊的 toString()