天天看点

《JavaScript启示录》——1.18 构造函数实例都拥有指向其构造函数的Constructor属性

本节书摘来自异步社区《javascript启示录》一书中的第1章,第1.18节,作者:【美】cody lindley著,更多章节内容可以访问云栖社区“异步社区”公众号查看

任何对象实例化时,都是在幕后将constructor属性创建为对象/实例的属性。这是指创建对象的构造函数。下面创建一个object()对象,保存在变量foo中,然后验证constructor属性在创建的对象中是否可用。

如下功能非常方便:如果正在使用一些实例,而无法看到是谁或者是什么创建了它(尤其是别人编写的代码),那么可以以此确定它是否是一个数组或一个对象等。

下面实例化javascript语言中的大多数预配置对象。请注意,在字面量/原始值上使用constructor属性能够指向正确的构造函数。

constructor属性也适用于用户自定义的构造函数。如下代码中,我们定义了一个customconstructor()构造函数,然后使用new关键字调用构造函数来生成一个对象。一旦创建了对象,就可以使用constructor属性了。

注意

大家可能会感到困惑,当不返回对象时,原始值为何拥有指向构造函数的constructor属性。使用原始值的时候,依然调用了构造函数,因此原始值和构造函数依然有关系。然而,最终的结果是一个原始值。

对用户自定义的构造函数表达式,如果想让constructor属性记录构造函数的实际名称,则必须给予构造函数表达式一个实际名称(如var person = function person(){};)。

继续阅读