• 【JavaScript】Reflect 静态方法(二)


    以下内容为学习记录,可以参考 MDN 原文。

    环境

    • node v12.18.1
    • npm 6.14.5
    • vscode 1.46
    • Microsoft Edge 83

    概念

    Reflect 是一个内置的对象,它提供拦截 JavaScript 操作的方法。这些方法与 proxy handlers 的方法相同。Reflect 不是一个函数对象,因此它是不可构造的。

    Reflect 上含有一些静态方法,这些方法在 Object 上也有,同时还有一些操作符方法。

    has

    静态方法 Reflect.has() 作用与 in 操作符相同。

    const object1 = {
      property1: 42
    };
    
    console.log(Reflect.has(object1, 'property1'));
    // expected output: true
    
    console.log(Reflect.has(object1, 'property2'));
    // expected output: false
    
    console.log(Reflect.has(object1, 'toString'));
    // expected output: true
    

    isExtensible

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

    const object1 = {};
    
    console.log(Reflect.isExtensible(object1));
    // expected output: true
    
    Reflect.preventExtensions(object1);
    
    console.log(Reflect.isExtensible(object1));
    // expected output: false
    
    const object2 = Object.seal({});
    
    console.log(Reflect.isExtensible(object2));
    // expected output: false
    

    ownKeys

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

    const object1 = {
      property1: 42,
      property2: 13
    };
    
    const array1 = [];
    
    console.log(Reflect.ownKeys(object1));
    // expected output: Array ["property1", "property2"]
    
    console.log(Reflect.ownKeys(array1));
    // expected output: Array ["length"]
    

    preventExtensions

    静态方法 Reflect.preventExtensions() 方法阻止新属性添加到对象 (例如:防止将来对对象的扩展被添加到对象中)。该方法与 Object.preventExtensions() 相似。

    const object1 = {};
    
    console.log(Reflect.isExtensible(object1));
    // expected output: true
    
    Reflect.preventExtensions(object1);
    
    console.log(Reflect.isExtensible(object1));
    // expected output: false
    

    set

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

    const object1 = {};
    Reflect.set(object1, 'property1', 42);
    
    console.log(object1.property1);
    // expected output: 42
    
    const array1 = ['duck', 'duck', 'duck'];
    Reflect.set(array1, 2, 'goose');
    
    console.log(array1[2]);
    // expected output: "goose"
    

    setPrototypeOf

    除了返回类型以外,静态方法 Reflect.setPrototypeOf() 与 Object.setPrototypeOf() 方法是一样的。它可设置对象的原型(即内部的 [[Prototype]] 属性)为另一个对象或 null,如果操作成功返回 true,否则返回 false。

    const object1 = {};
    
    console.log(Reflect.setPrototypeOf(object1, Object.prototype));
    // expected output: true
    
    console.log(Reflect.setPrototypeOf(object1, null));
    // expected output: true
    
    const object2 = {};
    
    console.log(Reflect.setPrototypeOf(Object.freeze(object2), null));
    // expected output: false
    
  • 相关阅读:
    21.错误和异常
    20.装饰器相关
    19.装饰器
    18.函数编程的练习
    Remove Duplicates from Sorted List II
    Ubuntu 12.04输入密码登陆后又跳回到登录界面
    Remove Linked List Elements
    Populating Next Right Pointers in Each Node *
    Convert Sorted Array to Binary Search Tree
    Flatten Binary Tree to Linked List *
  • 原文地址:https://www.cnblogs.com/jiangbo44/p/13676040.html
Copyright © 2020-2023  润新知