不支持。Object.setPrototypeOf 在 IE9/10 完全不支持,IE11 行为不稳定;老旧运行时(如 Node.js <4.0、旧 Android WebView)可能缺失或实现不全;宿主对象(如 document.all、window)不可操作;polyfill 无法彻底兜底;现代环境需校验支持性与对象可扩展性。
不支持。Object.setPrototypeOf 并非在所有宿主环境中可用或可靠。
IE 浏览器兼容性差
IE9 和 IE10 完全不支持该方法,调用会直接抛出 TypeError;IE11 虽有实现,但行为不稳定——对某些内置对象(如 Array.prototype)赋值可能静默失败或意外报错。
部分嵌入式或老旧 JS 运行时缺失
早期 Node.js 版本(< 4.0)、某些 IoT 设备 JS 引擎、或定制化 WebView(如旧版 Android 系统 WebView)可能未实现该 API,或实现不完整。
特殊宿主对象无法操作document.all 等浏览器特有宿主对象,以及某些引擎加固的内置对象(如 window、location),即使在现代浏览器中调用 Object.setPrototypeOf 也会被拒绝,通常抛出 TypeError。
安全 polyfill 不能完全兜底
虽然可通过检测 + __proto__ 回退等方式编写兼容层,但 __proto__ 本身在 IE10 及部分环境受限,且已被标准弃用;polyfill 也无法修复性能退化或冻结对象限制等问题。
现代环境基本可用但需校验
Chrome 30+、Firefox 30+、Safari 9+、Node.js 4.0+ 均原生支持,但仍建议使用前检查:
typeof Object.setPrototypeOf === 'function' Object.isExtensible(obj) 为 true obj 是真实对象,非 null、undefined 或原始值