我们可以使用Object.getPrototypeOf()
方法获取一个对象的原型对象,然后对它作出修改。
参考下面的例子:

在上面的例子中,我们创建了一个对象a
,然后以它为原型创建了一个对象b
,然后使用Object.getPrototypeOf()
方法获取对象b
的原型对象,这个原型对象等于对象a
。
也就是说Object.getPrototypeOf(b).y = 2
等同于a.y = 2
,这两种写法都可以修改b
对象的原型对象。
我们也可以删除原型对象中的某些属性:

有时候,我们想要完全替换对象的原型对象,比如b
对象的原型对象是a
,我们想把它替换为c
,此时可以使用Object.setPrototypeOf()
方法。

上面的例子中:我们把b
对象的原型由a
对象替换成了c
对象,因此b
对象不再继承a
对象的"x"
属性,而是继承了c
对象的"y"
属性。
一般不建议使用Object.setPrototypeOf()
方法替换原型对象,而是应该尽可能使用Object.create()
创建我们需要指定原型的新对象,因为JavaScript可能会基于对象原型不变的情况作出一些性能上的优化,如果替换过某对象的原型对象,在使用它时就需要重新检查它的原型链,这可能会导致执行速度变慢。