Skip to content

assign、keys、getOwnPropertyDescriptor、create、defineProperty #167

Open
@TieMuZhen

Description

@TieMuZhen

image

const obj1 = {
    a: 1,
    b: 2
}
const obj2 = {
    b: 3,
    c: 4
}
const obj3 = {
    c: 5,
    d: 6
}
const obj4 = Object.assign(obj1, obj2, obj3);
console.log(obj1);
console.log(obj2);
console.log(obj3);
console.log(obj4);

console.log("+++++++++++++++");
obj4.d = 100;
console.log(obj1);
console.log(obj4);

image

image
image
image
image
image
image

const source = {
    a: 1,
    get b(){
        return 2;
    }
}
const res = Object.assign({}, source);
console.log(res);

image

const source = {
    a: 1,
    get b(){
        return 2;
    }
}

Object._Assign = function(target, ...sources){
    sources.forEach(source => {
        let all_Desc = Object.keys(source).reduce((sum, key) => {
            sum[key] = Object.getOwnPropertyDescriptor(source, key);
            return sum;
        }, {})
        Object.defineProperties(target, all_Desc);
    })
    return target;
} 

const res = Object._Assign({}, source);
console.log(res);

image

const v1 = 123;
const v2 = "123";
const v3 = true;
const v4 = function test(){};
const v5 = Object.assign({}, v1, v2, v3, v4);
console.log(v5);

image
因为上面变量不是对象,所以先将变量隐式转换为对象再进行assign操作

console.log(new Number(v1));
console.log(new String(v2));
console.log(new Boolean(v3));
console.log(new Function(v4));

image

const r1 = new Number(v1);
const r2 = new String(v2);
const r3 = new Boolean(v3);
const r4 = new Function(v4);
for(let k in r2){
    console.log(k, r2[k]);
}

image
如上,r1r3r4console没有返回任何结果,即不能枚举,只有r2返回了如上结果,不能枚举的属性Object.assign方法会忽略
image
image
image
image
image
image

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions