12_Reflect

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        //   Reflect 对象与 Proxy 对象一样,es6 新api.

        /*  一、概述:
                设计目的:
                    1. 将 Object 对象的一些明显属于语言内部的方法(如:Object.defineProperty) ,
                    放到 Reflect 对象上。
                    2. 修改某些 Object 方法的放回结果,让其变得更合理。
                    Object.defineProperty(obj, name, desc)在无法定义属性时,会抛出一个错误,
                    而Reflect.defineProperty(obj, name, desc)则会返回false。
                    3. 让 Object 操作都变成函数行为。某些 Object 操作是命令式,让他们变成函数行为。
                    4. Reflect 对象的方法与 Proxy 对象的方法一一对应,只要是 Proxy 对象的方法,
                    就能在 Reflect 对象上找到对应的方法。可以让 Proxy 方便的调用对应的 Relect 方法, 
                    完成默认行为,作为修改行为的基础。也就是说,不管 Proxy 怎么修改默认行为,
                    你总可以在 Reflect 上获取默认行为。

            二、静态方法:
                Reflect 对象一共有 13 个静态方法。

            三、使用 Proxy 实现观察者模式:
                观察者模式 (Observe mode)指的是函数自动观察数据对象,一旦对象有变化,函数就会自动执行。
        */

        // 老写法:
        try {
            Object.defineProperty(target, property, attributes);
            // success
        } catch (e) {
            // failure
        }


        // 新写法:
        if (Reflect.defineProperty(target, property, attributes)) {
            // success
        } else {
            // failure
        }


        // 命令式:
        'assign' in Object //true

        // 函数行为:
        Reflect.has(Object, 'assign') //true


        function Greeting(name) {
            this.name = name;
        }

        // new 的写法
        const instance = new Greeting('张三');
        console.log(instance)  //Greeting {name: "张三"}

        // Reflect.construct 的写法
        const instance1 = Reflect.construct(Greeting, ['张三']);
        console.log(instance1)  //Greeting {name: "张三"}


    </script>
</body>

</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值