
原型式继承不依赖构造函数,Object.create() 是它的核心实现方式——几行代码就能让新对象继承已有对象的全部属性和方法,同时保持自身可扩展、不污染源对象。
直接继承一个基础对象
把任意普通对象当作“原型”,用 Object.create(proto) 创建新实例。新对象自身为空,所有属性访问都沿原型链向上查找。
- 源对象成为新对象的
__proto__,即原型链第一环 - 修改新对象自有属性(如
devConfig.timeout = 10000)不会影响原型 - 读取未定义的属性(如
devConfig.retries)自动从原型获取
带自有属性的继承(第二参数控制)
传入属性描述符对象作为第二个参数,可在继承原型的同时,定义新对象自身的属性,并精确控制其特性(是否可写、可枚举等)。
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
- 适合覆盖原型同名属性(如
role: { value: 'admin' }) - 避免意外修改原型,又保留共享能力(如
permissions: ['read']仍来自原型) - 语法与
Object.defineProperty一致,支持value、writable、enumerable等字段
注意浅克隆与引用共享
Object.create 不复制值,只建立原型链接。这意味着:
- 基础类型(字符串、数字)修改互不影响
- 引用类型(数组、对象、函数)在所有继承实例间共享
- 例如:原型上有
arr: [1, 2],任一实例push后,其他实例读取arr也会看到新增项
特殊原型场景
第一个参数不限于普通对象,灵活指定可改变继承行为:
-
Object.create(null)→ 创建无任何原型的对象,彻底干净,常用于哈希表或避免原型污染 -
Object.create(Object.prototype)→ 等价于{}或new Object(),有默认方法(toString等) -
Object.create(Animal.prototype)→ 常用于类继承中重设子类原型,配合constructor修复










