Open
Description
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);
const source = {
a: 1,
get b(){
return 2;
}
}
const res = Object.assign({}, source);
console.log(res);
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);
const v1 = 123;
const v2 = "123";
const v3 = true;
const v4 = function test(){};
const v5 = Object.assign({}, v1, v2, v3, v4);
console.log(v5);
因为上面变量不是对象,所以先将变量隐式转换为对象再进行assign
操作
console.log(new Number(v1));
console.log(new String(v2));
console.log(new Boolean(v3));
console.log(new Function(v4));
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]);
}
如上,r1
、r3
、r4
的console
没有返回任何结果,即不能枚举,只有r2
返回了如上结果,不能枚举的属性Object.assign
方法会忽略