• 使用其他对象去更新目标对象

    使用target里面的key去查找其他的对象,如果其他对象里有该key,则把该值赋给target,如果多个对象都有同一个值,则以最后的为准 会更新原对象

    如果要更新某个class的实例,那么需要使用updateIns

    类型参数

    • T extends object

    参数

    • target: T
    • 动态参数...others: object[]

    返回 T

    updateIns

    updateObj({ a: 12, b: undefined, c: 3 }, { a: 1 }, { b: 2 }, { d: 4 }); // { a: 1, b: 2, c: 3, }
    updateObj({ a: 12, b: undefined, c: 3 }, { a: 1 }, { b: 2 }, { c: undefined }); // { a: 1, b: 2, c: undefined, }
    updateObj({ a: 12, b: undefined, c: 3 }, { aa: 2, bb: 2, dd: 123 }, { c: undefined }); // { a: 12, b: undefined, c: undefined, }

    updateObj({ a: 12, b: undefined, c: 3 }, null as any, undefined as any); // { a: 12, b: undefined, c: 3, }

    const obj = { a: 1, b: 2 };
    isEqual(updateObj(obj, obj), obj); // true
    isEqual(updateObj(obj, obj), { a: 1, b: 2 }); // true
    // 更新class实例
    class UpdateTestSuperClass {
    a = 1;
    b = 2;
    private test() {
    return 'super test';
    }
    fn1() {
    return 'super fn1';
    }
    get len() {
    this.test();
    return 0;
    }
    }
    class UpdateTestClass extends UpdateTestSuperClass {
    c = 3;
    fn2() {
    return 'sub fn2';
    }
    override get len() {
    return 1;
    }
    }

    // objUpdate 不会更新实例的方法
    const ins = updateObj(new UpdateTestClass(), {
    fn1() {
    return 'replace fn1';
    },
    fn2() {
    return 'replace fn2';
    },
    });
    ins.fn1(); // 'super fn1'
    ins.fn2(); // 'sub fn2'