-
Notifications
You must be signed in to change notification settings - Fork 0
/
reflect.html
39 lines (36 loc) · 1.7 KB
/
reflect.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>reflect</title>
</head>
<body>
<script>
// 1. 将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上
// 现阶段,某些方法同时在Object和Reflect对象上部署,未来的新方法将只部署在Reflect对象上
// 2. 修改某些Object方法的返回结果,让其变得更合理
// 比如,Object.defineProperty(obj, name, desc)在无法定义属性时,会抛出一个错误
// 而Reflect.defineProperty(obj, name, desc)则会返回false
// 3. 让Object操作都变成函数行为
// 某些Object操作是命令式,比如name in obj和delete obj[name]
// 而Reflect.has(obj, name)和Reflect.deleteProperty(obj, name)让它们变成了函数行为
// 4. Reflect对象的方法与Proxy对象的方法一一对应
// 只要是Proxy对象的方法,就能在Reflect对象上找到对应的方法
// 不管Proxy怎么修改默认行为,总可以在Reflect上获取默认行为
// 静态方法
/*Reflect.apply(target,thisArg,args)
Reflect.construct(target,args)
Reflect.get(target,name,receiver)
Reflect.set(target,name,value,receiver)
Reflect.defineProperty(target,name,desc)
Reflect.deleteProperty(target,name)
Reflect.has(target,name)
Reflect.ownKeys(target)
Reflect.isExtensible(target)
Reflect.preventExtensions(target)
Reflect.getOwnPropertyDescriptor(target, name)
Reflect.getPrototypeOf(target)
Reflect.setPrototypeOf(target, prototype)*/
</script>
</body>
</html>