Reflect

作者: Rui___ | 来源:发表于2019-11-12 22:06 被阅读0次

    反射
    es6有部分对象的方法 放到 Reflect 功能基本一致

    // 1) get /set
    const obj = {};
    
    Reflect.set(obj,'name','zf'); // obj.name = zwf;
    
    console.log(Reflect.get(obj,'name'));
    
    // 2) has
    // 老的写法
    console.log('a' in {a:1});
    // 新的写法
    console.log(Reflect.has({a:1},'a'));
    // 3)defineProperty
    // 把对象上的属性get set 都给重写了
    const obj = {a:1}
    //Object.freeze(obj); // 这个属性就能不能配置了   冻结freeze
    let flag = Reflect.defineProperty(obj,'a',{//修改成功或不成功有返回值
        value:100
    })
    console.log(flag);
    console.log(obj)
    
    // 4)getOwnPropertyDescriptor
    const obj = {a:1};
    console.log(Reflect.getOwnPropertyDescriptor(obj,'a'));
    
    // 5)ownKeys
    let obj = {
        a:1,
        [Symbol()]:1
    };
    console.log(Object.getOwnPropertyNames(obj));
    console.log(Object.getOwnPropertySymbols(obj));
    console.log(Reflect.ownKeys(obj))
    
    // 6)
    Reflect.setPrototypeOf 
    Reflect.getPrototypeOf
    
    // 7) 函数的apply方法    bind    call apply的区别 改变this指向
    const fn = function(a,b){ // apply 支持多个参数传参
        console.log(this,a,b);
    }
    //fn.apply(1,[2,5])//1:this a:2,b:5
    
    fn.apply = function(){
        console.log('apply')
    }
    //fn.apply(1,[2,5])//这里不执行了,会执行函数自己定义的apply
    
    
    // 函数原型上的apply方法 让他执行
    //fn.__proto__.apply(1,[2,5])//这样也找不到
    // call 的特点 1) 是改this指向 让函数执行
    //Function.prototype.apply.call(fn,1,[2,3]);//把apply 的this改成fn
    Reflect.apply(fn,1,[2,3]); // 用原型上的apply方法  等价上述方法
    
    
    //8  等同于new
    class XXX{
        constructor(name){
            this.name = name
        }
    }
    let xxx =  Reflect.construct(XXX,['zdddfww']);
    console.log(xxx); // new
    
    //9)
    Reflect.deleteProperty // delete obj.a 返回是否删除成功
    
    //10)扩展不能添加属性
    let obj = {}; // 扩展不能添加属性
    Reflect.preventExtensions(obj)
    obj.a = 1;
    //11)判断是否可以扩展
    console.log(Reflect.isExtensible(obj));
    
    

    相关文章

      网友评论

          本文标题:Reflect

          本文链接:https://www.haomeiwen.com/subject/oblebctx.html