es6 对象的扩展

Dear 丶 2023-06-11 03:27 117阅读 0赞

1.属性的简洁表示法

    function f(x,y) {

      return {x,y};

    }

    // 等同于

    function f(x,y){

      return {x:x,y:y};

    }

    f(1,2)   // Object {x:1,y:2}

    例如:

      let birth = ‘2000/01/01’;

      const Person = {

        name: ‘张三’,

          // 等同于 birth: birth

        birth,

          // 等同于hello: function()…

        hello() {console.log(‘我的名字’,this.name);}

      };

    例如:用于函数的返回值

    function getPoint() {

        const x = 1;

        const y = 10;

        return {x,y};

    }

    console.log(getPoint());

      // {x:1,y:10}

  2.属性名表达式

    表达式作为对象的属性名

      let obj = {

        [propKey]: true,

        [‘a’ ‘bc’]:123

      };

      console.log(obj[propKey]); // true

      console.log(obj[‘abc’]); // 123

    例如:

      let lastWord = ‘last word’;

      const a = {

        ‘first word’: ‘hello’,

        [lastWord]: ‘world’

      }

      console.log(a[‘first word’]); // “hello”

      console.log(a[lastWord]); // “world”

      console.log(a[‘last word’]); // “world”

    例如: 表达式可以用于定义方法名

      let obj = {

        [‘h’ ‘ello’]() {

          return ‘hi’;

        }

      };

      console.log(obj.hello()); // ‘hi’

  3.方法的 name 属性

    例如:函数的name 属性,返回函数名。

      const person = {

        sayName() {

        console.log(‘hello’);

        }

      }

      console.log(person.sayName.name); // “sayName”

4.Object.is()

    ES 比较两个值是否相等,只有两个运算符,相等运算符,相等运算符(==)

    和严格相等运算符(===)

       0 === -0 // true

      NaN === NaN // false

      Object.is( 0,-0); // false

      Object.is(NaN,NaN) // true

5.Object.assign()

    Object.assign 方法用于对象的合并,将源对象的所有的可枚举属性,赋值到目标对象

    例如;

      const target = {a:1};

      const source1 = {b:2};

      const source2 = {c:2};

      Object.assign(target,source1,source2);

      console.log(target); // {a:1,b:2,c:3}

    例如:同名属性的替换,当遇到同名属性的时候,处理方法是替换。

      const target = {a:{b:’c’,d:’e’}}

      const source = {a: {b:’hello’}}

      console.log(Object.assign(target,source))

        // {a: {b:’hello’}}

    例如: 数组的处理

      Object.assign 可以用来出来数组,把数组作为对象看

      Object.assign([1,2,3],[4,5])

        // [4,5,3]

    常见用途(1) 为对象添加属性

        class Point {

          constructor(x,y){

            Object.assign(this,{x,y});

          }

        }

    常见用途(2) 为对象添加方法

      Object.assign(SomeClass.prototype,{

        someMethod(arg1,arg2){

          …..

        }

      anotherMethod(){

        …

        }

      })

    常见用途(3) 克隆对象

      function clone (origin) {

        return Object.assign({},origin);

      }

6.属性的可枚举行和遍历

    可枚举性

      Object.getOwnProperDescriptor 方法可以获取该属性的描述对象

        let obj = {foo:123};

      Object.getOwnPropertyDescriptor(obj,’foo’)

        // {

          value: 123,

          writable: true,

          enumerable: true,

          configurable:true

        }

    描述对象的enumerable 属性,称为“可枚举属性” 如果该属性的值为false,

      就表示会忽略当前属性。

    目前有四个操作会忽略 enumerable 为false 属性。

      for…in , Object.keys(), JSON.stringify(), Object.assign();

      ES6一共有5种方法可以遍历对象的属性

        (1) for … in

            循环遍历对象自身的和继承的可枚举属性

        (2) Object.keys(obj)

            Object.keys 返回一个数组,包括对象自身的所有可枚举属性

        (3) Object.getOwnPropertyNames(obj)

            Object.getOwnPropertyNames 返回一个数组,包含对象自身的所有属性

        (4) Object.getOwnPropetrySymbols(obj)

            Object.getOwnPropetrySymbols 返回一个数组,包含对象自身的所有

            Symbol属性的键名。

        (5) Reflect.ownKeys(Obj)

          Reflect.ownKeys 返回一个数组,包含对象自身的所有键名。

8._proto_ 属性。

    _proto_ 属性,用来读取和设置当前对象的protoype对象。

      const obj = {

        method: function(){

          console.log(111)

        }

      }

    obj._proto_= someOtherrObj;

    Object.setPrototypeOf()

    Object.setPrototypeOf 方法的作用与 _proto_ 相同,用来设置一个对象的prototype对象

      返回参数对象本身,。

        // 格式

      Object.setPrototypeOf(object,prototype)

        // 用法

      const o = Object.setPrototypeOf({},null);

        Object.getPrototypeOf()

        该方法与Object.setPrototypeOf 方法配套,用于读取一个对象的原型对象。

            Object.getPrototypeOf(obj);

9.super 关键字

    this 关键字总是指向函数所在的当前对象,super 指向当前对象的原型对象。

      const proto = {

        foo: ‘hello’

      };

      const obj = {

        find(){

        return super.foo;

        }

      }

      Object.setPrototypeOf(obj,proto);

      obj.find();

10.Object.keys() ,Object.values(),Object.entries()

    let {keys,values,entries} = Object;

    let object = {a:1,b:2,c:3};

    for (let key of keys(obj)){

      console.log(key); // ‘a’,’b’,’c’

    }

    for(let key of keys(obj)){

      console.log(key);// ‘a’,’b’,’c’

    }

    for(let value of values(obj)){

      console.log(key); // 1,2,3

      }

    for (let [key,value] of entries(obj)){

      console.log([key,value]); // [‘a’,1],[‘b’,2],[‘c’,3]

    }

11.对象的扩展运算

    对象的结构赋值用于从一个对象取值,相当于将所有可遍历的,但尚未对齐的属性,

    分配到指定的对象上面,所有的键和值他们的值,都会拷贝到新对象上面。

    let {x,y,…z} = {x:1,y:2,a:3,b:4};

      x // 1

      y // 2

      z // {a:3,b:4}

    扩展运算

      扩展运算符(…) 用于取出参数对象的多有可遍历属性,拷贝到当前对象之中。

        let z = {a:3,b:4};

        let n = {…z};

        n // {a:3,b:4}

    合并两个对象

      let ab = {…a,…b};

        // 等同于

      let ab = Object.assign({},a,b)

更多专业前端知识,请上 【猿2048】www.mk2048.com

发表评论

表情:
评论列表 (有 0 条评论,117人围观)

还没有评论,来说两句吧...

相关阅读

    相关 es6 对象扩展

    1.属性的简洁表示法     function f(x,y) \{       return \{x,y\};     \}     // 等同于     funct

    相关 ES6-对象扩展

    在[JavaScript原生对象-Object对象详解][JavaScript_-Object]中已经比较详细的介绍了Object对象,其中已经多次提高了ES6,这一篇将详细的

    相关 ES6 对象扩展

    属性的简洁表示法 ES6允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。 下面代码表明,ES6允许在对象之中,直接写变量。这时,属性名为变量名, 属