object.create() 创建以指定对象为原型的新实例,新对象自身为空但可继承原型属性;传null得无原型对象,传普通对象则继承其属性;支持通过第二个参数定义自有属性,不调用构造函数,需手动执行初始化。

用 Object.create() 创建指定原型对象的全新实例,核心是把目标原型对象作为参数传入,它会返回一个新对象,该对象的 [[Prototype]](即内部原型)直接指向你传入的对象。
基本用法:传入原型对象即可
Object.create(proto) 的第一个参数 proto 就是要设置为新对象原型的对象。这个新对象本身是空的(除隐式原型外无自有属性),但能通过原型链访问 proto 上的属性和方法。
- 如果传
null,新对象没有原型(__proto__为null),无法继承任何东西 - 如果传普通对象(如
{a: 1}),新对象的原型就是它,可继承a - 不推荐传非对象值(如字符串、数字),会抛出
TypeError
配合构造函数模拟“实例化”行为
Object.create() 本身不调用构造函数,所以不会执行初始化逻辑(比如设置 this.name)。若需类似 new Foo() 的效果,可手动赋值或封装:
将音频或视频文件转录为带时间轴的歌词或字幕格式(如LRC、SRT、WebVTT、ASS、TTML),并制作卡拉OK视频。
- 先用
Object.create(Foo.prototype)创建原型链正确的空对象 - 再用
Foo.call(newObj, ...args)手动执行构造逻辑,给新对象添加实例属性 - 这样既复用了原型方法,又完成了实例初始化
第二个参数:定义自有属性(可选)
Object.create(proto, propertiesObject) 的第二个参数用于直接在新对象上定义属性(类似 Object.defineProperties() 的描述符格式):
- 例如:
Object.create({x: 1}, { y: { value: 2, writable: true } })→ 新对象有自有属性y,原型上有x - 常用于设置不可枚举、只读或带 getter/setter 的属性
- 注意:这里定义的是新对象自身的属性,不是加到原型上
与 new 的关键区别
虽然都能创建对象并关联原型,但语义和行为不同:
-
new Constructor()会自动链接Constructor.prototype,并执行构造函数 -
Object.create(proto)只做原型链接,完全不涉及函数调用,更底层、更灵活 - 现代开发中,
Object.create(null)常用于创建纯净字典对象(避开Object.prototype的方法污染)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










