为何对象的新实例也可作为构造函数?以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
相关产品推荐
相关产品推荐

