Object对象中的静态方法setPrototypeOf

2024-01-06 10:49:13

一、产生原因

任何对象(除了null)中,都有一个内部属性__proto__,我们通过这个内部属性可以获取到当前的原型,以及其整个原型链。但是由于__proto__只是一个内部属性(浏览器广泛支持),而不是一个正式的对外的 API,所以在正式的代码中,是不能使用的。所以,这个时候,就需要Object的静态方法setPrototypeOf。

二、作用

Object.setPrototypeOf() 静态方法可以将一个指定对象的原型(即内部的 __proto__属性)设置为另一个对象或者 null。

三、语法

Object.setPrototypeOf(obj, prototype)

obj:要设置原型的对象

prototype:该对象的新原型(可以是一个对象,也可以是null),如果设置了null,表示该对象没有原型

内部可以理解成:obj.__proto__ = prototype

例如:

const obj = {};
const parent = { foo: "bar" };

console.log(obj.foo);
// 输出: undefined

Object.setPrototypeOf(obj, parent);

console.log(obj.foo);
// 输出: "bar"

四、异常

如果发生以下情况中的任何一个,则抛出该异常:

1. obj 参数为 undefined 或 null

2. obj 参数是不可扩展的,或者它是一个不可修改原型的特异对象,例如 Object.prototype 或 window。

需注意:如果新原型与obj的原始原型具有相同的值,不会报错。

3. prototype 参数不是对象或 null

目录

相关推荐
深入理解对象原型__proto__深入理解constructor对象的isPrototypeOf和静态方法Object.getPrototypeOf深入理解原型链JavaScript--原型链图解