We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
参考文章:
Reflect 对象是 ES6 为操作对象而提供的新 API。在此之前,有关对象的操作大多涉及 Object 构造函数方法的调用,而 Reflect 对象的提出,其主要目的就是将关于对象的操作从 Object 上单独提取出来。 它有以下几个设计目的:
现阶段,某些方法同时在 Object 和 Reflect 对象上部署,未来的新方法将只部署在 Reflect 对象上。
Object.defineProperty(obj, name, desc)
Reflect.defineProperty(obj, name, desc)
name in obj
delete obj[name]
Reflect.has(obj, name)
Reflect.deleteProperty(obj, name)
注意:下述 Reflect 对象方法中,target 需要传入对象类型,因为 Reflect 本身就是关于对象的操作,若 target 不是对象类型,调用方法时会报错。
Reflect.apply(target, thisArg, args)
Function.prototype.apply.call()
Reflect.construct(target, args)
new Fn(...args)
Reflect.get(target, name, receiver)
Reflect.set(target, name, value, receiver)
Reflect.defineProperty(target, name, desc)
Object.defineProperty()
Reflect.set()
Reflect.defineProperty()
Reflect.deleteProperty(target, name)
Reflect.has(target, name)
Reflect.ownKeys(target)
Object.getOwnPropertyNames
Object.getOwnPropertySymbols
Reflect.isExtensible(target)
Reflect.preventExtensions(target)
Reflect.getOwnPropertyDescriptor(target, name)
Object.getOwnPropertyDescriptor()
Reflect.getOwnPropertyDescriptor()
Reflect.getPrototypeOf(target)
Reflect.setPrototypeOf(target, prototype)
The text was updated successfully, but these errors were encountered:
No branches or pull requests
参考文章:
Reflect 对象设计目的
Reflect 对象是 ES6 为操作对象而提供的新 API。在此之前,有关对象的操作大多涉及 Object 构造函数方法的调用,而 Reflect 对象的提出,其主要目的就是将关于对象的操作从 Object 上单独提取出来。
它有以下几个设计目的:
Object.defineProperty(obj, name, desc)
在无法定义属性时,会抛出一个错误,而Reflect.defineProperty(obj, name, desc)
则会返回 false。name in obj
和delete obj[name]
,而Reflect.has(obj, name)
和Reflect.deleteProperty(obj, name)
让它们变成了函数行为。Reflect 对象的 13 个静态方法
Reflect.apply(target, thisArg, args)
Function.prototype.apply.call()
的替代写法,当函数自定了自己的 apply 方法时使用Reflect.construct(target, args)
new Fn(...args)
,提供了一种不使用 new 来调用构造函数的方法。即上文提到的命令式操作行为统一函数化。Reflect.get(target, name, receiver)
Reflect.set(target, name, value, receiver)
Reflect.defineProperty(target, name, desc)
Object.defineProperty()
,为对象定义属性。后者将在未来被废除。Reflect.set()
不同在于,Reflect.defineProperty()
可定义更加详细的描述对象 descriptionReflect.deleteProperty(target, name)
delete obj[name]
,用于删除对象的属性Reflect.has(target, name)
Reflect.ownKeys(target)
Object.getOwnPropertyNames
+Object.getOwnPropertySymbols
Reflect.isExtensible(target)
Reflect.preventExtensions(target)
Reflect.getOwnPropertyDescriptor(target, name)
Object.getOwnPropertyDescriptor()
,区别在于Object.getOwnPropertyDescriptor()
接收第一个参数不是对象时,不会报错而是返回 undefined;Reflect.getOwnPropertyDescriptor()
会抛出错误Reflect.getPrototypeOf(target)
Reflect.setPrototypeOf(target, prototype)
The text was updated successfully, but these errors were encountered: