object.setprototypeof()可修改对象原型但性能差且受限;语法为object.setprototypeof(obj, prototype),适用于模拟继承、测试调试等场景,但不可用于密封/冻结对象,推荐用object.create()或class替代。

可以用 Object.setPrototypeOf() 方法直接修改对象的原型(即内部的 [[Prototype]]),但要注意它性能较差、影响优化,且不能用于已冻结/密封的对象。
基本用法:设置对象的原型
语法是 Object.setPrototypeOf(obj, prototype),第一个参数是要修改的对象,第二个是新的原型(可以是另一个对象、null,或函数的 prototype)。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
例如:
const parent = { sayHello() { return 'Hello'; } };
const child = { name: 'Alice' };
Object.setPrototypeOf(child, parent);
console.log(child.sayHello()); // 'Hello'
console.log(Object.getPrototypeOf(child) === parent); // true
常见使用场景
-
模拟类继承关系:在不使用
class或extends时手动连接原型链 - 临时替换原型做测试或调试:比如给某个对象临时挂载 mock 方法
- 实现“原型委托”模式:让一个对象复用另一组方法,而不共享状态
注意事项和限制
- 如果目标对象是
sealed(密封)或frozen(冻结)的,会抛出TypeError - V8 等引擎会对用该方法修改过原型的对象禁用部分优化(如内联缓存),降低运行速度
- 不推荐在热路径(如循环、高频调用函数)中使用
- 更推荐的方式是创建时就指定原型,比如用
Object.create(parent)或构造函数
替代方案(更推荐)
多数情况下,优先考虑这些方式:
- 创建新对象时指定原型:
const obj = Object.create(parent); - 用构造函数 +
prototype:function Foo() {} Foo.prototype = parent; - ES6 类语法:
class Child extends Parent {}(底层也基于原型链)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










