Object方法

2021-06-11  本文已影响0人  YoungEvita

一、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简明教程

上一篇下一篇

猜你喜欢

热点阅读