覆盖 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()
。
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]
Object.toString()
,即使该对象自己的原型具有更特殊的 toString()
。