【模拟实现】Object.assign()
williamzhou 3/23/2021  面试模拟实现
# 原理
# 代码实现
/**
 * 模拟实现 Object.assign
 * @param {Object} target 接收对象
 * @param {Object} source 被拷贝的对象
 * @returns 
 */
function myAssign(target, source) {
  if (target == null) {
    throw new TypeError('Cannot convert undefined or null to object')
  }
  const to = Object(target) // 装箱转换,对于 object ,仍然指向同一个地址
  for (const key in source) {
    if (source.hasOwnProperty(key)) {
      to[key] = source[key]
    }
  }
  return to
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 测试一下
const target1 = { a: 1, b: 2 };
const target2 = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget1 = Object.assign(target1, source)
const returnedTarget2 = myAssign(target2, source)
console.log(returnedTarget1 === target1, returnedTarget2 === target2) // true true
// returnedTarget1、target1 -> {a: 1, b: 4, c: 5}
// returnedTarget2、target2 -> {a: 1, b: 4, c: 5}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
