美文网首页
对象的扩展和defineProperty()

对象的扩展和defineProperty()

作者: 沫顾念 | 来源:发表于2019-01-08 17:01 被阅读0次

    对象的扩展

    1.属性的简洁表示法

    ES6 允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。

    const foo = 'bar';
    const baz = {foo};
    baz // {foo: "bar"}
    
    // 等同于
    const baz = {foo: foo};
    

    除了属性简写,方法也可以简写。

    2.属性名表达式

    JavaScript 定义对象的属性,有两种方法。

    // 方法一
    obj.foo = true;
    
    // 方法二
    obj['a' + 'bc'] = 123;
    

    3.对象的扩展运算符

    《数组的扩展》一章中,已经介绍过扩展运算符(...)。

    const [a, ...b] = [1, 2, 3];
    a // 1
    b // [2, 3]
    

    ES2018 将这个运算符引入了对象。

    Object.defineProperty()

    语法节

    Object.defineProperty(obj, prop, descriptor)
    

    obj
    要在其上定义属性的对象。
    prop
    要定义或修改的属性的名称。
    descriptor
    将被定义或修改的属性描述符。

    返回值节

    被传递给函数的对象。
    在ES6中,由于 Symbol类型的特殊性,用Symbol类型的值来做对象的key与常规的定义或修改不同,而Object.defineProperty 是定义key为Symbol的属性的方法之一。

    描述节

    该方法允许精确添加或修改对象的属性。通过赋值操作添加的普通属性是可枚举的,能够在属性枚举期间呈现出来(for...in 或 Object.keys 方法), 这些属性的值可以被改变,也可以被删除。这个方法允许修改默认的额外选项(或配置)。默认情况下,使用 Object.defineProperty() 添加的属性值是不可修改的。

    属性描述符节

    对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。数据描述符是一个具有值的属性,该值可能是可写的,也可能不是可写的。存取描述符是由getter-setter函数对描述的属性。描述符必须是这两种形式之一;不能同时是两者。

    相关文章

      网友评论

          本文标题:对象的扩展和defineProperty()

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