美文网首页
Object方法

Object方法

作者: YoungEvita | 来源:发表于2021-06-11 20:09 被阅读0次

    一、Object.assign()

    用于将所有可枚举属性的值从一个或多个源对象分配到目标对象。它将返回目标对象。

    语法

    Object.assign(target, ...sources)

    参数

    target —— 目标对象
    sources —— 源对象

    返回值

    目标对象

    描述

    如果目标对象中的属性具有相同的键,则属性将被源对象中的属性覆盖。后面的源对象的属性将类似地覆盖前面的源对象的属性
    Object.assign 方法只会拷贝源对象自身的并且可枚举的属性到目标对象
    Object.assign()拷贝的是(可枚举)属性值。假如源值是一个对象的引用,它仅仅会复制其引用值

    示例
    var obj1 = {
        a: 1,
        b: 2,
        c: 3
    }
    
    var obj2 = {
        a: 2,
        d: 4
    }
    
    console.log(Object.assign({}, obj1, obj2)) // {a: 2, b: 2, c: 3, d: 4}
    

    针对深拷贝,需要使用其他办法(JSON.parse(JSON.stringify(obj1))),因为 Object.assign()拷贝的是(可枚举)属性值。
    假如源值是一个对象的引用,它仅仅会复制其引用值。

    var obj1 = {
        a: 1,
        b: 2,
        c: {
            value: 3
        }
    }
    
    var obj2 = {
        a: 2,
        d: 4
    }
    
    obj3 = Object.assign({}, obj1, obj2)
    console.log(obj3) // {a:2, b:2, c:{value:3}, d:4}
    
    
    obj2.a = 5
    console.log(obj2) // {a:5, d:4}
    console.log(obj3) // {a:2, b:2, c:{value:3}, d:4} ,a并未同步更新
    
    obj1.c.value = 6
    console.log(obj1) // {a:1, b:2, c:{value:6}}
    console.log(obj3) // {a:2, b:2, c:{value:6}, d:4} , c同步更新
    
    var obj1 = {
        a: 1,
        c: {
            value: 2
        }
    }
    
    var obj2 = JSON.parse(JSON.stringify(obj1))
    console.log(obj2) // {a:1, c:{value:2}}
    
    obj1.c.value = 7
    console.log(obj1) // {a:1, c:{value:7}}
    console.log(obj2) // {a:1, c:{value:2}} // obj1的改变,并未影响obj2
    

    二、Object.setPrototypeOf()

    设置一个指定的对象的原型 ( 即, 内部[[Prototype]]属性)到另一个对象或 null

    语法

    Object.setPrototypeOf(obj, prototype)

    参数

    obj —— 要设置其原型的对象
    prototype —— 该对象的新原型(一个对象或null)

    示例
    
    var parent = {
        foo1() {
            console.log("Hello from the Parent");
        }
    }
    
    var child = {
        foo() {
            console.log("Hello from the Child");
        }
    }
    
    Object.setPrototypeOf(child, parent);
    child.foo1(); // Hello from the Parent
    child.foo()    // Hello from the Child
    
    参考

    [1]. Web 开发技术
    [2]. ES6简明教程

    相关文章

      网友评论

          本文标题:Object方法

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