Object.assign()

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

参数(target,...source):target是目标对象;source是源对象

注意:

1.第一个参数不能出现undefined和null

2.后面的参数如果出现undefined、null会忽略它们

3.参数为数组或字符串的话,是以对象的方式来处理,number类型、布尔类型会忽略(它们的键名拿不到),同名会替换

4.继承属性和不可枚举属性是不能拷贝的

const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const res = Object.assign(
    target,
    null,
    1,
    false,
    [1, 2, 3],
    source,
    undefined,
    '123',
    Object.create(
        {
            foo: 1
        },
        {
            bar: {
                value: 2,
                enumerable: false
            },
            baz: {
                value: 3,
                enumerable: true
            }
        }
    )
);
console.log(target);
console.log(res);

 

例子:

如果Object.assign()拷贝的值还是对象的话,那么实际上它拷贝的是一份引用。

let obj1 = {
    a: 0,
    b: {
        c: 0
    }
};
let obj2 = Object.assign({}, obj1);
obj1.b.c = 3;
console.log(obj2);

合并原型

function f1() {

}
function f2() {

}
function MyFn() {
    f1.call(this);
    f2.call(this);
}
MyFn.prototype = Object.create(f1.prototype);
Object.assign = (MyFn.prototype, f2.prototype);

给原型上追加方法

function MyFn() {

}
// MyFn.prototype.someMethod1 = function () {

// }
Object.assign(MyFn.prototype, {
    someMethod1: function () {

    },// 相当于上面的注释
    someMethod2: function () {

    }
})

克隆对象

function clone(origin) {
    let originProto = Object.getPrototypeOf(origin);
    return Object.assign(Object.create(originProto), origin);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值