zoukankan      html  css  js  c++  java
  • ECMAScript6 入门 对象的扩展

    对象的扩展
    
    1:属性的简洁表示
    (也就是说当对象的属性和值同名时,可以缩写为一个)
    
    const foo = 'bar';
    const baz = {foo};
    baz // {foo: "bar"}
    
    // 等同于
    const baz = {foo: foo};
    
    方法简写
    const o = {
      method() {
        return "Hello!";
      }
    };
    
    // 等同于
    
    const o = {
      method: function() {
        return "Hello!";
      }
    };
    
    
    2:属性名表达式
    (可以使用表达式定义对象的key)
    
    已知定义对象的属性方法
    // 方法一
    obj.foo = true;
    
    // 方法二
    obj['a' + 'bc'] = 123;
    
    但是使用字面量方式定义对象(使用大括号)的话,只能用上面方法一
    var obj = {
      foo: true,
      abc: 123
    };
    
    ES6支持
    let obj = {
      [propKey]: true,
      ['a' + 'bc']: 123
    };
    
    表达式还可以定义方法名
    let obj = {
      ['h' + 'ello']() {
        return 'hi';
      }
    };
    
    obj.hello() // hi
    
    3:方法的name属性
    函数的name属性,返回函数名
    
    如果对象的方法使用了取值函数(getter)和存值函数(setter),
    则name属性不是在该方法上面,而是该方法的属性的描述对象的get和set属性上面,
    返回值是方法名前加上get和set
    
    4:属性的可枚举性和遍历
    对象的每个属性都存在一个描述对象,用来控制该属性的行为。
    Object.getOwnPropertyDescriptor方法可以获取该属性的描述对象
    enumerable表示该对象是否可以枚举
    
    以下四个操作都会忽略对象的不可枚举属性
    for...in循环:只遍历对象自身的和继承的可枚举的属性。
    Object.keys():返回对象自身的所有可枚举的属性的键名。
    JSON.stringify():只串行化对象自身的可枚举的属性。
    Object.assign(): 忽略enumerable为false的属性,只拷贝对象自身的可枚举的属性
    
    已知遍历对象属性的五个方法
    (1)for...in
    
    for...in循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。
    
    (2)Object.keys(obj)
    
    Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。
    
    (3)Object.getOwnPropertyNames(obj)
    
    Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。
    
    (4)Object.getOwnPropertySymbols(obj)
    
    Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有 Symbol 属性的键名。
    
    (5)Reflect.ownKeys(obj)
    
    Reflect.ownKeys返回一个数组,包含对象自身的所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。
    
    5:super关键字
    this 关键字总是指向函数所在的当前对象
    (
        关联知识点
        1:普通函数中this与函数定义时无关,只与函数执行时所在的对象有关
        2:箭头函数中的this执行定义函数时所处的对象
    )
    super 指向当前对象的原型对象
    对象新增API
    
    1:Object.is()
    比较两个值是否相等,与严格运算符===的行为基本一致
    区别:+0 不等于-0 NaN 等于自身了
    
    2:Object.assign()
    用于对象合并 将源对象source可枚举属性,复制到目标对象
    (这种方法属于浅拷贝,关于对象拷贝的相关,可参考我写的另外一篇对象的拷贝)
    
    3:Object.getOwnPropertyDescriptors()
    返回对象的某个属性的描述对象
    
    4:Object.getOwnPropertyDescriptors()
    返回指定对象所有自身属性的描述对象,不包含继承的属性
    
    5:对象的继承是通过原型链实现
    用来读取设置当前对象的prototype对象
    Object.setPrototypeOf()
    Object.getPrototypeOf()
    
    额外知识点:__proto__属性,Object.setPrototypeOf(),Object.getPrototypeOf()
    
    6:Object.keys()
    返回值是一个数组,成员是参数对象的所有可遍历的属性的key(不包含继承)
    
    7:Object.values()
    返回值是一个数组,成员是参数对象的所有可遍历的属性的value(不包含继承)
    
    8:Object.entries()
    返回值是一个数组,成员是参数对象的所有可遍历的属性的key 和 value(不包含继承)
    
    9:Object.fromEntries()
    Object.entries的逆操作
    不忘初心,不负梦想
  • 相关阅读:
    转------深入理解--Java按值传递和按引用传递
    排序算法 -------未完待续
    eclipse智能提示报错(to avoid the message, disable the...)
    关于hashcode 和 equals 的内容总结
    随笔 软件设计师 -----------考后总结
    wpf 中用 C# 代码创建 PropertyPath ,以对间接目标进行 Storyboard 动画.
    AvaloniaUI体验
    wpf 通过为DataGrid所绑定的数据源类型的属性设置Attribute改变DataGrid自动生成列的顺序
    wpf 在不同DPI下如何在DrawingVisual中画出清晰的图形
    基于libcurl实现REST风格http/https的get和post
  • 原文地址:https://www.cnblogs.com/panrui1994/p/11585217.html
Copyright © 2011-2022 走看看