You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何对象的新实例也可作为构造函数?以Array与自定义构造函数为例

问题解答

你的核心困惑来自两个概念的错位对比,我们逐层梳理逻辑:

1. 首先纠正认知误区

「是Object的实例」和「可以作为构造函数使用」两个属性没有任何互斥关系,判断一个对象能不能作为构造函数调用的唯一标准是:它是不是可被new操作符调用的函数对象。

2. 你写的示例中本身就存在符合双重属性的对象

你自定义的Person本身就是典型的「既是Object的实例、又是可使用的构造函数」的对象,可运行以下代码验证:

var Person = function (name, age) {
  this.name = name;
  this.age = age;
}
// 验证Person是Object的实例
console.log(Person instanceof Object) // 输出 true
// 验证Person是函数类型
console.log(typeof Person) // 输出 function
// 可以正常作为构造函数使用
const lily = new Person('lily', 28)

你之前的错误是把Person构造出来的普通实例kevin,和作为构造函数本身的Array做了错位对比,两者根本不是同一个层级的对象。

3. Array的身份对应关系

我们可以把内置对象和你自定义的对象做一一对应,逻辑就完全通了:

  • 内置构造函数Array ↔ 自定义构造函数Person:两者都是function类型,都遵循原型链继承自Object,都可以被new调用创建实例
  • Array构造出的实例[1,2,3] ↔ Person构造出的实例kevin:两者都是普通object类型,不是函数,自然不能作为构造函数使用

内容的提问来源于stack exchange,提问作者user13752749

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:45:02