比较 Reflect 和 Object 方法
ES2015中引入的 Reflect
对象是一个内置对象,提供了与JavaScript对象交互的方法。Reflect
上存在的一些静态函数也对应于ES2015之前的Object
上可用的方法。尽管某些方法在行为上看似相似,但它们之间常常存在细微的差异。
下表详细介绍了Object
和 Reflect
API上可用方法之间的差异。请注意,如果API中不存在某种方法,则将其标记为N/A。
Method Name | Object |
Reflect |
---|---|---|
defineProperty() |
|
如果在对象上定义了属性,则 |
defineProperties() |
|
N/A |
set() |
N/A |
如果在对象上成功设置了属性,则 |
get() |
N/A |
|
deleteProperty() |
N/A |
如果属性从对象中删除,则 |
getOwnPropertyDescriptor() |
如果传入的对象参数上存在 |
如果给定属性存在于对象上,则 |
getOwnPropertyDescriptors() |
|
N/A |
getPrototypeOf() |
|
|
setPrototypeOf() |
如果对象的原型设置成功,则 |
如果在对象上成功设置了原型,则 |
isExtensible() |
如果对象是可扩展的,则Object.isExtensible()返回true,否则返回false。如果第一个参数不是对象(原始值),则在ES5中抛出 |
如果对象是可扩展的,则 |
preventExtensions() |
|
returns 如果对象已变得不可扩展,则 |
keys() |
|
N/A |
ownKeys() |
N/A |
|