一. Object.getPrototypeOf()用法
Object.getPrototypeOf() 方法返回指定对象的原型(内部[[Prototype]]属性的值)。
语法
Object.getPrototypeOf(object)
参数
obj
要返回其原型的对象。
返回值
给定对象的原型。如果没有继承属性,则返回 null
二. Object.assign()用法
Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
语法
Object.assign(target, ...sources)
参数
target
目标对象。
sources
源对象。
返回值
目标对象。
三. Object.create()用法
Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的proto。
语法
Object.create(proto[, propertiesObject])
参数
proto
新创建对象的原型对象。
propertiesObject
可选。如果没有指定为 undefined
,则是要添加到新创建对象的不可枚举(默认)属性(即其自身定义的属性,而不是其原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应Object.defineProperties()
的第二个参数。
返回值
一个新对象,带着指定的原型对象和属性。
例外
如果propertiesObject
参数是 null
或非原始包装对象,则抛出一个 TypeError
异常。
四 . Object.getOwnPropertyDescriptors()用法
Object.getOwnPropertyDescriptors()方法用来获取一个对象的所有自身属性的描述符。
语法
Object.getOwnPropertyDescriptors(obj)
参数
obj
任意对象。
返回值
所指定对象的所有自身属性的描述符,如果没有任何自身属性,则返回空对象。
五. 克隆对象
// 写法一
const clone1 = {
__proto__: Object.getPrototypeOf(obj),
...obj
};
// 写法二
const clone2 = Object.assign(
Object.create(Object.getPrototypeOf(obj)),
obj
);
// 写法三
const clone3 = Object.create(
Object.getPrototypeOf(obj),
Object.getOwnPropertyDescriptors(obj)
)
// 建议二、三写法。
题外内容
浅拷贝一个对象
Object.assign()
方法只能拷贝源对象的可枚举的自身属性,同时拷贝时无法拷贝属性的特性们,而且访问器属性会被转换成数据属性,也无法拷贝源对象的原型,该方法配合 Object.create()
方法可以实现上面说的这些。
Object.create(
Object.getPrototypeOf(obj),
Object.getOwnPropertyDescriptors(obj)
);