• Reflect的十三个语法学习


     Reflect 是一个内置的对象,它提供拦截 JavaScript 操作的方法。这些方法与

    proxy handlers (en-US)的方法相同。Reflect不是一个函数对象,因此它是不可构造的。

    默认调用功能
    Reflect.get(target, key, receiver)对象属性的读取
    Reflect.set(target, key, value, receiver)对象属性的设置
    Reflect.deleteProperty(target, key)删除对象上的属性
    Reflect.ownKeys(target)返回由目标对象自身的属性键组成的数组
    Reflect.getOwnPropertyDescriptor(target, key)获取给定属性的属性描述符
    Reflect.defineProperty(target, propKey, propDesc)定义或修改一个对象的属性
    Reflect.preventExtensions(target)阻止新属性添加到对象
    Reflect.getPrototypeOf(target)获取指定对象原型的函数
    Reflect.isExtensible(target)判断一个对象是否可扩展
    Reflect.setPrototypeOf(target, proto)设置或改变对象原型的函数
    Reflect.apply(target, object, args)对一个函数进行操作,同事可以传入一个数组作为调用参数
    Reflect.construct(target, args)对构造函数进行new操作,实现创建类的实例

    Reflect语法之一:Reflect.has(target, propertyKey)

    说明:判断一个对象是否存在某个属性,和 in 运算符的功能完全相同。

    1. //语法: Reflect.has(target, propertyKey):判断一个对象是否存在某个属性,
    2. in 运算符的功能完全相同。
    3. const sum = {
    4. name:"张三",
    5. age:18
    6. }
    7. console.log(Reflect.has(sum,"age")) //true
    8. console.log(Reflect.has(sum,"hobby")) //false

    Reflect语法之二:Reflect.deleteProperty(object, 'property')

    语法:静态 Reflect.deleteProperty() 方法允许删除属性。它就像 作为函数 的delete运算符。  

    1. //语法:静态 Reflect.deleteProperty() 方法允许删除属性。
    2. 它就像 作为函数 的delete运算符。
    3. const object1 = {
    4. property1: 42,
    5. property2: 43,
    6. };
    7. Reflect.deleteProperty(object1, 'property1');
    8. // 返回值:Boolean 值表明该属性是否被成功删除。
    9. console.log(object1); //{property2: 43}

    Reflect语法之三:Reflect.isExtensible()

    判断一个对象是否可扩展(即是否能够添加新的属性)。与它 Object.isExtensible() 方法相似,但

    有一些不同。

    Reflect语法之四: Reflect.preventExtensions(object1)

     静态方法 Reflect.preventExtensions(object1)返回一个 Boolean 值表明目标对象是否成功被设置

    为不可扩展。

    1. /*
    2. 静态方法 Reflect.isExtensible() 判断一个对象是否可扩展(即是否能够添加新的属性)。
    3. 与它 Object.isExtensible() 方法相似,但有一些不同。
    4. */
    5. const object1 = {};
    6. console.log(Reflect.isExtensible(object1));//true(返回值为true说明可扩展)
    7. /*
    8. 静态方法 Reflect.preventExtensions(object1)返回一个 Boolean 值表明目标对象是
    9. 否成功被设置为不可扩展。
    10. */
    11. Reflect.preventExtensions(object1);
    12. console.log(Reflect.isExtensible(object1));//打印false,表明对象现在不可扩展

    Reflect语法之五:

    Reflect.defineProperty(target,propertyKey,attributes)

    1. /*
    2. 静态方法 Reflect.defineProperty() 基本等同于 Object.defineProperty() 方法,
    3. 唯一不同是返回 Boolean 值。
    4. 语法:Reflect.defineProperty(target, propertyKey, attributes)
    5. target:目标对象
    6. propertyKey:要定义或修改的属性的名称
    7. attributes:要定义或修改的属性的描述。
    8. 返回值:Boolean 值指示了属性是否被成功定义。如果target不是 Object,抛出一个 TypeError。
    9. */
    10. let obj = {}
    11. const a = Reflect.defineProperty(obj,'x',{
    12. // get(){
    13. // return 7
    14. // }
    15. value:7
    16. })
    17. console.log(a) //true

    Reflect语法之六:

    Reflect.getOwnPropertyDescriptor(target, propertyKey)

    静态方法 Reflect.getOwnPropertyDescriptor() 与 Object.getOwnPropertyDescriptor() 方法相似。

    如果在对象中存在,则返回给定的属性的属性描述符。否则返回 undefined。

    1. /*
    2. 静态方法 Reflect.getOwnPropertyDescriptor() 与 Object.getOwnPropertyDescriptor() 方法相似。如果在对象中存在,则返回给定的属性的属性描述符。否则返回 undefined。
    3. 语法:Reflect.getOwnPropertyDescriptor(target, propertyKey)
    4. 参数:
    5. target 需要寻找属性的目标对象。
    6. propertyKey 获取自己的属性描述符的属性的名称。
    7. */
    8. let obj1 = {foo:123}
    9. const sum = Reflect.getOwnPropertyDescriptor(obj1, 'foo')
    10. console.log(sum) //{value: 123, writable: true, enumerable: true, configurable: true}

    Reflect语法之七:Reflect.getPrototypeOf()

    静态方法 Reflect.getPrototypeOf() 与 Object.getPrototypeOf() 方法几乎是一样的。

    都是返回指定对象的原型(即内部的 [[Prototype]] 属性的值)。

    1. /*
    2. 静态方法 Reflect.getPrototypeOf() 与 Object.getPrototypeOf() 方法几乎是一样的。
    3. 都是返回指定对象的原型(即内部的 [[Prototype]] 属性的值)。
    4. */
    5. const object2 = { property1: 42 };
    6. const proto1 = Reflect.getPrototypeOf(object2);
    7. console.log(proto1); //打印object的原型
    8. const proto12 = Reflect.getPrototypeOf(proto1);
    9. console.log(proto12) //null

    Reflect语法之八:Reflect.ownKeys()

    静态方法 Reflect.ownKeys() 返回一个由目标对象自身的属性键组成的数组。

    1. /*
    2. Reflect.ownKeys()
    3. 静态方法 Reflect.ownKeys() 返回一个由目标对象自身的属性键组成的数组。
    4. */
    5. //如果是一个对象
    6. let obj3 = {name:'张三',age:18,hobby:['打球','玩游戏']}
    7. const a1 = Reflect.ownKeys(obj3)
    8. console.log(a1)//name,age,hobby

    Reflect语法之九:Reflect.get()

    Reflect.get()方法与从 对象 (target[propertyKey]) 中读取属性类似,

    但它是通过一个函数执行来操作的。

    1. /*
    2. Reflect.get()方法与从 对象 (target[propertyKey]) 中读取属性类似,
    3. 但它是通过一个函数执行来操作的。
    4. */
    5. let obj4 = {x:1,y:2}
    6. const a2 = Reflect.get(obj4,'x')
    7. console.log(a2) //1

    Reflect语法之十:Reflect.set()

    静态方法 Reflect.set() 工作方式就像在一个对象上设置一个属性。

    1. /*
    2. 静态方法 Reflect.set() 工作方式就像在一个对象上设置一个属性。
    3. 语法:
    4. Reflect.set(target, propertyKey, value)
    5. target:设置属性的目标对象。
    6. propertyKey:设置的属性的名称。
    7. value:添加属性的值
    8. */
    9. let obj5 = {}
    10. Reflect.set(obj5, "prop", "value");
  • 相关阅读:
    【毕业设计】树莓派寻迹小车 车道线检测 - 机器视觉 单片机 嵌入式 物联网
    Hudi从内核到实战介绍
    Java线程通信
    Web大学生网页作业成品——环保垃圾分类网站设计与实现(HTML+CSS+JavaScript) web前端开发技术 web课程设计 网页规划与设计
    6月26日第壹简报,星期日,农历五月廿八
    人防行业通信系统
    Spring | Spring的“数据库开发“ (Srping JDBC)
    数据结构 --- JAVA版链表
    QT中QThread的各个方法,UI线程关系,事件关系详解(3)
    点云从入门到精通技术详解100篇-LiDAR 点云与影像匹配点云的滤波方法研究与应用(中)
  • 原文地址:https://blog.csdn.net/m0_62823653/article/details/125490224