在Vue中Object.assign()对象的使⽤
女神节快乐英文在Vue中Object.assign()对象可以实现拷贝。
Object.assign()对象是⽤于将所有可枚举属性的值从⼀个或多个源对象复制到⽬标对象,将返回⽬标对象。
韩国语初级入门**⽤法:**Object.assign(target,sources)(target:⽬标对象,sources:源对象,可以多个源对象)。
⼀、Object.assign()对象的拷贝
const Object1={
a:1,
b:2,
c:3
};
const Object2={
c:4,
d:5
melancholy
};
const object2=Object.assign(object2,object1);
console.log(object2.c);// 4 若⽬标对象中的属性具有和源对象相同的键,则⽬标对象的属性会被源对象中的相同属性覆盖。
console.log(object2);//{c:3,d:5,a:1,b:2}winter solstice
console.log(object1);//{a:1,b:2,c:3}不会影响到源对象
总结:
百度翻译 英语1.如果⽬标对象中的属性具有相同的键,则属性将被源对象中的属性覆盖。后⾯的源对象的属性将类似地覆盖前⾯的源对象的属性paradox
2.Object.assign ⽅法只会拷贝源对象⾃⾝的并且可枚举的属性到⽬标对象。该⽅法使⽤源对象的[[Get]
]和⽬标
对象的[[Set]],所以它会调⽤相关 getter 和 tter。因此,它分配属性,⽽不仅仅是复制或定义新的属性。如
果合并源包含getter,这可能使其不适合将新属性合并到原型中。为了将属性定义(包括其可枚举性)复制到
原型,应使⽤OwnPropertyDescriptor()和Object.defineProperty()。
⼆、Object.assign()对象的深拷贝
针对深拷贝,需要使⽤其他办法,因为 Object.assign()拷贝的是属性值。假如源对象的属性值是⼀个对象的引⽤,那么它也只指向那个引⽤。let obj1 ={ a:0, b:{ c:0}};
let obj2 = Object.assign({}, obj1);
console.log(JSON.stringify(obj2));// { a: 0, b: { c: 0}}
obj1.a =1;
console.log(JSON.stringify(obj1));// { a: 1, b: { c: 0}}
console.log(JSON.stringify(obj2));// { a: 0, b: { c: 0}}
obj2.a =2;
console.log(JSON.stringify(obj1));// { a: 1, b: { c: 0}}
console.log(JSON.stringify(obj2));// { a: 2, b: { c: 0}}
obj2.b.c =3;
console.log(JSON.stringify(obj1));// { a: 1, b: { c: 3}}
console.log(JSON.stringify(obj2));// { a: 2, b: { c: 3}}
最后⼀次赋值的时候,b是值是对象的引⽤,只要修改任意⼀个,其他的也会受影响
// Deep Clone (深拷贝)
obj1 ={ a:0, b:{ c:0}};
let obj3 =JSON.par(JSON.stringify(obj1));
obj1.a =4;
obj1.b.c =4;
console.log(JSON.stringify(obj3));// { a: 0, b: { c: 0}}
3、对象的合并
const o1 ={ a:1};
const o2 ={ b:2};
const o3 ={ c:3};
const obj = Object.assign(o1, o2, o3);
console.log(obj);// { a: 1, b: 2, c: 3 }
console.log(o1);// { a: 1, b: 2, c: 3 }, 注意⽬标对象⾃⾝也会改变。
其实就是对象的拷贝,o1就是⽬标对象,后⾯的是源对象,后⾯的属性等会拷贝到⽬标对象
4、合并具有相同属性的对象
const o1 ={ a:1, b:1, c:1};
const o2 ={ b:2, c:2};
const o3 ={ c:3};
const obj = Object.assign({}, o1, o2, o3);
console.log(obj);// { a: 1, b: 2, c: 3 }
江沪日语1.属性被后续参数中具有相同属性的其他对象覆盖。
2.⽬标对象的属性与源对象的属性相同,源的会覆盖⽬标的属性
5.继承属性和不可枚举属性是不能拷贝
const obj = ate({foo:1},{// foo 是个继承属性。
bar:{
value:2// bar 是个不可枚举属性。
},
baz:{
value:3,
enumerable:true// baz 是个⾃⾝可枚举属性。
}
});
创建对象时,如果没有设置enumerable的值,默认为fal(不可枚举属性),设置为true,则为可枚举属性const copy = Object.assign({}, obj);
console.log(copy);// { baz: 3 }
6.原始类型会被包装为对象英语音标发音下载
const v1 ="abc";
const v2 =true;
const v3 =10;
const v4 =Symbol("foo")
const obj = Object.assign({}, v1,null, v2, undefined, v3, v4);
// 原始类型会被包装,null 和 undefined 会被忽略。
// 注意,只有字符串的包装对象才可能有⾃⾝可枚举属性。
console.log(obj);// { "0": "a", "1": "b", "2": "c" }
7.异常会打断后续拷贝任务
const target = Object.defineProperty({},"foo",{
value:1,
writable:fal
});// target 的 foo 属性是个只读属性。
Object.assign(target,{bar:2},{foo2:3, foo:3, foo3:3},{baz:4});
// TypeError: "foo" is read-only
// 注意这个异常是在拷贝第⼆个源对象的第⼆个属性时发⽣的。
console.log(target.bar);// 2,说明第⼀个源对象拷贝成功了。
六级计分器console.log(target.foo2);// 3,说明第⼆个源对象的第⼀个属性也拷贝成功了。
console.log(target.foo);// 1,只读属性不能被覆盖,所以第⼆个源对象的第⼆个属性拷贝失败了。console.log(target.foo3);// undefined,异常之后 assign ⽅法就退出了,第三个属性是不会被拷贝到的。console.log(target.baz);// undefined,第三个源对象更是不会被拷贝到的。
整机英文