1、Object.assign(target,source1,source2,…)
该方法主要用于对象的合并,将源对象source的所有可枚举属性合并到目标对象target上,此方法只拷贝源对象的自身属性,不拷贝继承的属性。
Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。同名属性会替换。
Object.assign只能进行值的复制,如果要复制的值是一个取值函数,那么将求值后再复制。
Object.assign可以用来处理数组,但是会把数组视为对象。
const target = {
x : 0, y : 1}
const source = {
x : 1, z : 2, fn : {
number: 2}}
console.log(Object.assign(target,source))
// target { x : 1, y : 1, z : 2, fn : { number: 2}} 同名属性会被覆盖
target.fn.nubmer = 3
console.log(source)
// source { x : 1, y : 1, z : 2, fn : { number: 3}} 拷贝为对象应用
function Person(){
this.name = 1
};
Person.prototype.country = 'china';
var student = new Person();
student.age = 29 ;
const young = {
name : 'zhang'};
Object.assign(young,student);
// young {name : 'zhang', age : 29} // 只能拷贝自身的属性,不能拷贝prototype
Object.assign([1, 2, 3], [4, 5]) // 把数组当作对象来处理
// [4, 5, 3]
2.Object.create(prototype,[propertiesObject])
使用指定的原型对象及其属性去创建一个新的对象
var parent = {
x: 1, y: 2}
var child = Object.create(parent,{
z : {
// z会成为创建对象的属性
writable:true,
configurable:true,
value: "newAdd"
}