Object.getOwnPropertyDescriptor() 方法返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性)
- 语法:
Object.getOwnPropertyDescriptor(obj, prop)
- 参数
- obj:需要查找的目标对象
- prop:目标对象内属性名称(String类型)
- 返回值: 如果指定的属性存在于对象上,则返回其属性描述符对象(property descriptor),否则返回 undefined。
- 描述:该方法允许对一个属性的描述进行检索。在 Javascript 中, 属性 由一个字符串类型的“名字”(name)和一个“属性描述符”(property descriptor)对象构成。更多关于属性描述符类型以及他们属性的信息可以查看:Object.defineProperty.
一个属性描述符是一个记录,由下面属性当中的某些组成的:
- value:该属性的值(仅针对数据属性描述符有效)
- writable:当且仅当属性的值可以被改变时为true。(仅针对数据属性描述有效)
- get:获取该属性的访问器函数(getter)。如果没有访问器, 该值为undefined。(仅针对包含访问器或设置器的属性描述有效)
- set:获取该属性的设置器函数(setter)。 如果没有设置器, 该值为undefined。(仅针对包含访问器或设置器的属性描述有效)
- configurable:当且仅当指定对象的属性描述可以被改变或者属性可被删除时,为true。
- enumerable:当且仅当指定对象的属性可以被枚举出时,为 true。
示例
|
|
注意事项
在 ES5 中,如果该方法的第一个参数不是对象(而是原始类型),那么就会产生出现 TypeError。而在 ES2015,第一个的参数不是对象的话就会被强制转换为对象。
Object.getOwnPropertyDescriptors() 方法用来获取一个对象的所有自身属性的描述符。
- 语法:
Object.getOwnPropertyDescriptors(obj)
- 参数
- obj:任意对象
- 返回值:所指定对象的所有自身属性的描述符,如果没有任何自身属性,则返回空对象。
示例
浅拷贝一个对象
Object.assign() 方法只能拷贝源对象的可枚举的自身属性,同时拷贝时无法拷贝属性的特性们,而且访问器属性会被转换成数据属性,也无法拷贝源对象的原型,该方法配合 Object.create() 方法可以实现上面说的这些。
|
|
创建子类
创建子类的典型方法是定义子类,将其原型设置为超类的实例,然后在该实例上定义属性。这可能会让尴尬,特别是对于 getters 和 setter 而言。 相反,您可以使用此代码设置原型:
|
|
Object.getPrototypeOf()
Object.getPrototypeOf() 方法返回指定对象的原型(内部[[Prototype]]属性的值)
语法:Object.getPrototypeOf(object)