Object.assign2 = function(target, ...source) {
if (target == null || target == undefined) {
throw new TypeError('Cannot convert undefined or null to object')
}
let ret = Object(target)
source.forEach(function(obj) {
if (obj != null) {
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
ret[key] = obj[key]
}
}
}
})
return ret
}
其实这里更好的写法,使用Object原型上直接添加方法的话,添加的是可枚举的,而真正的assign方法添加的是不可枚举的,所以使用Object.defineProperty进行添加。修改:
function assign(target, ...source) {
if (target == null || target == undefined) {
throw new TypeError('Cannot convert undefined or null to object')
}
let ret = Object(target)
source.forEach(function(obj) {
if (obj != null) {
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
ret[key] = obj[key]
}
}
}
})
return ret
};
Object.defineProperty(obj,'assign',{
...
})