reflect 是一个内置的对象,它提供可拦截javascript操作的方法。方法与代理处理程序的方法相同。reflect 不是一个函数对象,因此它是不可构造的。
new reflect() //错误的写法
reflect使用
reflect提供了一些静态方法,静态方法是指只能通过对象自身访问的的方法
1、reflect.apply()
2、reflect.construct()
3、reflect.defineproperty()
4、reflect.deleteproperty()
5、reflect.enumerate()
6、reflect.get()
7、reflect.getownpropertydescriptor()
8、reflect.getprototypeof()
9、reflect.has()
10、reflect.isextensible()
11、reflect.ownkeys()
12、reflect.preventextensions()
13、reflect.set()
14、reflect.setprototypeof()
静态方法的使用:
demo1:使用reflect.get()获取目标对象指定key的value。
let obj = { a: 1};let s1 = reflect.get(obj, a)console.log(s1) // 1
demo1的get()方法,拦截obj对象,然后读取key为a的值。当然,不用reflect也可以读取a的值。
demo2:使用reflect.apply给目标函数floor传入指定的参数。
const s2 = reflect.apply(math.floor, undefined, [1.75]); console.log(s2) // 1/ /reflect.apply()提供了3个参数,// 第一个参数是反射的函数,后面2个参数才是和数组的apply一致。
demo2的例子我们可以理解成是拦截了math.floor方法,然后传入参数,将返回值赋值给s2,这样我们就能在需要读取这个返回值的时候调用s2。
demo3:使用reflect.ownkeys获取对象的keys
console.log(reflect.ownkeys({a:0,b:1,c:2,d:3})); //输出 :[a, b, c, d] console.log(reflect.ownkeys([])); // [length] var sym = symbol.for(comet); var sym2 = symbol.for(meteor); var obj = { [sym]: 0, str: 0, 773: 0, 0: 0, [sym2]: 0, -1: 0, 8: 0, second str: 0 }; reflect.ownkeys(obj); //输出:/ [ 0, 8, 773, str, -1, second str, symbol(comet), symbol(meteor) ]
reflect.ownkeys的排序是根据: 先显示数字, 数字根据大小排序,然后是 字符串根据插入的顺序排序
以上就是javascript中reflect的详细介绍(附示例)的详细内容。