zoukankan      html  css  js  c++  java
  • Object

    Object构造函数的属性

    Object.length 值为1。

    获取一个对象的长度

    对象的长度不能用.length获取,用js原生的Object.key可以获取到

    let obj = {
        name:'希希',
        age:'18',
    };
    var arr = Object.keys(obj);
    console.log(arr); // ['name', 'age']
    console.log(arr.length); //2

    Object构造函数的方法

    1、Object.assign() 

    通过复制一个或多个对象来创建一个新的对象。

    Object.assign(target, ...sources)

    参数:

        target 目标对象

        sources 源对象

    返回值:

        目标对象

    示例:

    var obj = { a:1 };
    var copy = Object.assign({},obj);
    console.log(JSON.stringify(obj)); //{"a":1}
    console.log(JSON.stringify(copy)); //{"a":1}
    
    copy = Object.assign({b:2,c:3},obj);
    console.log(JSON.stringify(copy)); //{"b":2,"c":3,"a":1}
    console.log(JSON.stringify(obj));  //{"a":1}
    
    obj.a=4;
    console.log(JSON.stringify(obj)); //{"a":4}
    console.log(JSON.stringify(copy));//{"b":2,"c":3,"a":1}

    针对深拷贝,需要使用其他方法,因为 Object.assign()拷贝的是属性值。假如源对象的属性值是一个指向对象的引用,它也只拷贝那个引用值。

    var obj1 = { a:0,b:{ c:0 } };
    var copy1 = Object.assign({}, obj1);
    console.log(JSON.stringify(copy1)); // {"a":0,"b":{"c":0}}
    console.log(JSON.stringify(obj1)); // {"a":0,"b":{"c":0}}
    
    obj1.b.c=1;
    console.log(JSON.stringify(obj1)); // {"a":0,"b":{"c":1}}
    console.log(JSON.stringify(copy1));  // {"a":0,"b":{"c":1}}
    
    obj1.a=1;
    console.log(JSON.stringify(obj1));  // {"a":1,"b":{"c":1}}
    console.log(JSON.stringify(copy1));  // {"a":0,"b":{"c":1}}
    
    copy1.b.c=2;
    console.log(JSON.stringify(copy1));  // {"a":0,"b":{"c":2}}
    console.log(JSON.stringify(obj1)); // {"a":1,"b":{"c":2}}
    
    copy1.a=2;
    console.log(JSON.stringify(obj1)); // {"a":1,"b":{"c":2}}
    console.log(JSON.stringify(copy1)); //{"a":2,"b":{"c":2}}

    合并对象,当并具有相同属性的对象时,属性被后续参数中的相同属性的其他对象覆盖

    var o1 = {a:1};
    var o2 = {b:1};
    var o3 = {c:1};
    obj = Object.assign(o1,o2,o3);
    console.log(JSON.stringify(obj)); // {"a":1,"b":1,"c":1}
    console.log(JSON.stringify(o1));  // {"a":1,"b":1,"c":1}
    console.log(JSON.stringify(o2));  // {"b":1}
    console.log(JSON.stringify(o3));  // {"c":1}
    
    var b1={a:2,b:2,c:3};
    var b2 = {b:3,c:4};
    var b3 = {c:5};
    obj=Object.assign({},b1,b2,b3); // {a: 2, b: 3, c: 5}
    console.log(JSON.stringify(obj)); //{"a":2,"b":3,"c":5}

    2、Object.create()

    创建具有指定的原型,并可选择包含指定的属性对象。

    Object.create(proto[, propertiesObject])

    参数:

        proto 新创建对象的原型对象。

        propertiesObject 可选。如果没有指定为 undefined,则是要添加到新创建对象的可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应Object.defineProperties()的第二个参数。

    返回值:

        在指定原型对象上添加新属性后的对象。

    例外:

        如果proto参数不是 null 或一个对象,则抛出一个 TypeError 异常。

    let newPerson = Object.create({}, {
        height: {
            value: 188,
            writable: false,
        },
        skin: {
            value: 'yellow',
        }
    });
    newPerson //{height: 188, skin: "yellow"}

    3、Object.defineProperty()

     直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。

    Object.defineProperty(obj, prop, descriptor)

    参数:

      obj  要在其上定义属性的对象。

      prop 要定义或修改的属性的名称。

      descriptor 将被定义或修改的属性描述符。

    返回值:

      被传递给函数的对象。

      4、Object.defineProperties()

     直接在一个对象上定义新的属性或修改现有属性,并返回该对象。

    Object.defineProperties(obj, props)
  • 相关阅读:
    java.net. SocketException: Connection reset
    用PowerDesigner将SQL转pdm文件
    MyBatis--动态SQL(trim的用法)
    MyBatis--动态SQL(set的用法)
    MyBatis--动态SQL(where的用法)
    MyBatis--动态SQL(choose的用法)
    MyBatis--动态SQL(在insert动态插入列中使用if)
    MyBatis--动态SQL(在updae更新列中使用if)
    MyBatis--动态SQL(if的用法)
    Mybatis简介
  • 原文地址:https://www.cnblogs.com/biubiuxixiya/p/8086984.html
Copyright © 2011-2022 走看看