javascript数组实例的原型链天然指向array.prototype,由引擎自动设置;object.create(array.prototype)无法创建真数组;推荐用class extends array子类化扩展。

JavaScript 中数组原型继承自 Array.prototype,不是通过显式设置 __proto__ 或 Object.setPrototypeOf 实现的,而是由引擎在创建数组实例时自动完成的。
数组实例的原型链天然指向 Array.prototype
当你用字面量 [] 或构造函数 new Array() 创建数组时,JavaScript 引擎会自动把该实例的内部原型([[Prototype]])设为 Array.prototype。这是语言规范规定的内置行为,无需手动干预。
-
const arr = [];→arr.__proto__ === Array.prototype为 true -
arr instanceof Array返回 true,因为Array.prototype在其原型链上 -
Array.prototype本身继承自Object.prototype,所以数组也拥有toString、hasOwnProperty等方法
不能靠 Object.create(Array.prototype) 得到真数组
虽然 Object.create(Array.prototype) 创建的对象能访问 push、map 等方法,但它不是数组:
-
Array.isArray(obj)返回 false -
obj.length不会自动更新(比如push后长度不变) - 多数原生方法(如
Array.from、展开运算符)无法识别它为数组
想自定义“类数组”或扩展数组行为?推荐子类化
ES6 起支持继承 Array 构造函数,这是安全、标准的方式:
- 使用
class MyArray extends Array,实例既是数组又可添加自定义方法 - 子类实例的
__proto__指向MyArray.prototype,而后者原型是Array.prototype - 注意:必须用
super()调用父类构造器,否则可能丢失length等内部机制
Array.prototype 本身不继承自其他对象(除 Object.prototype)
Array.prototype 是一个普通对象,它的 __proto__ 是 Object.prototype,再往上是 null。它没有继承自某个“数组基类”,而是 JavaScript 内置构造函数的约定设计:
- 所有通过
Array构造的实例共享这个原型对象上的方法 - 你可以在
Array.prototype上添加方法(不推荐),所有数组实例立刻可用 - 但不要修改原生原型,容易引发冲突或不可预测行为
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











