一、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
网友评论