会,object.setprototypeof 在目标对象非对象、新原型非对象或null、目标对象被冻结/密封/不可扩展时抛出 typeerror;严格与非严格模式均报错,成功返回目标对象,失败直接 throw。

会,Object.setPrototypeOf 在特定条件下会抛出 TypeError 异常。
它不是“总是抛错”,但只要违反以下任一前提,就会立即报错:
- 目标对象
obj不是对象(比如传入null、undefined、原始值如42或'str') - 新原型
proto既不是对象,也不是null(例如传入undefined、42、'abc'、true) - 目标对象已被冻结(
Object.freeze(obj))、密封(Object.seal(obj))或不可扩展(Object.preventExtensions(obj))
注意:在严格模式下,这些错误一定会抛出;非严格模式下行为一致,也会抛错——不存在“静默失败”。这和直接赋值 obj.__proto__ = ... 的不一致行为(某些环境静默忽略、某些抛错)形成鲜明对比。
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
常见触发场景举例:
-
Object.setPrototypeOf({}, 'not an object')→ 抛错:TypeError: Property 'prototype' of object is not an object. -
Object.setPrototypeOf(Object.freeze({}), {})→ 抛错:TypeError: Cannot modify the prototype of a frozen object. -
Object.setPrototypeOf(123, {})→ 抛错:TypeError: Object.setPrototypeOf called on non-object.
返回值方面:成功时返回目标对象本身(便于链式调用),失败时不返回 false,而是直接 throw —— 这点和 Reflect.setPrototypeOf 不同(后者返回布尔值,且严格模式下失败仍 throw)。
本质上,Object.setPrototypeOf 是一个“强契约”操作:它明确要求输入合法、对象可变,否则宁可中断也不妥协。










