Artifact
32bfe1330f4e89627035b03a11bfac70312099e907e31f38567a1b443cd1d27b:
0000: 69 6d 70 6f 72 74 20 69 73 57 72 69 74 61 62 6c import isWritabl
0010: 65 20 66 72 6f 6d 20 27 2e 2e 2f 63 68 65 63 6b e from '../check
0020: 73 2f 69 73 2d 77 72 69 74 61 62 6c 65 27 0a 0a s/is-writable'..
0030: 2f 2a 2a 0a 20 2a 20 45 78 74 65 6e 64 20 61 6e /**. * Extend an
0040: 79 20 6f 62 6a 65 63 74 20 77 69 74 68 20 6f 74 y object with ot
0050: 68 65 72 20 70 72 6f 70 65 72 74 69 65 73 0a 20 her properties.
0060: 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a * @param { Obj
0070: 65 63 74 20 7d 20 73 72 63 20 2d 20 73 6f 75 72 ect } src - sour
0080: 63 65 20 6f 62 6a 65 63 74 0a 20 2a 20 40 72 65 ce object. * @re
0090: 74 75 72 6e 73 20 7b 20 4f 62 6a 65 63 74 20 7d turns { Object }
00a0: 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 65 the resulting e
00b0: 78 74 65 6e 64 65 64 20 6f 62 6a 65 63 74 0a 20 xtended object.
00c0: 2a 0a 20 2a 20 76 61 72 20 6f 62 6a 20 3d 20 7b *. * var obj = {
00d0: 20 66 6f 6f 3a 20 27 62 61 7a 27 20 7d 0a 20 2a foo: 'baz' }. *
00e0: 20 65 78 74 65 6e 64 28 6f 62 6a 2c 20 7b 62 61 extend(obj, {ba
00f0: 72 3a 20 27 62 61 72 27 2c 20 66 6f 6f 3a 20 27 r: 'bar', foo: '
0100: 62 61 72 27 7d 29 0a 20 2a 20 63 6f 6e 73 6f 6c bar'}). * consol
0110: 65 2e 6c 6f 67 28 6f 62 6a 29 20 3d 3e 20 7b 62 e.log(obj) => {b
0120: 61 72 3a 20 27 62 61 72 27 2c 20 66 6f 6f 3a 20 ar: 'bar', foo:
0130: 27 62 61 72 27 7d 0a 20 2a 0a 20 2a 2f 0a 65 78 'bar'}. *. */.ex
0140: 70 6f 72 74 20 64 65 66 61 75 6c 74 20 66 75 6e port default fun
0150: 63 74 69 6f 6e 20 65 78 74 65 6e 64 28 73 72 63 ction extend(src
0160: 29 20 7b 0a 20 20 6c 65 74 20 6f 62 6a 0a 20 20 ) {. let obj.
0170: 6c 65 74 20 69 20 3d 20 31 0a 20 20 63 6f 6e 73 let i = 1. cons
0180: 74 20 61 72 67 73 20 3d 20 61 72 67 75 6d 65 6e t args = argumen
0190: 74 73 0a 20 20 63 6f 6e 73 74 20 6c 20 3d 20 61 ts. const l = a
01a0: 72 67 73 2e 6c 65 6e 67 74 68 0a 0a 20 20 66 6f rgs.length.. fo
01b0: 72 20 28 3b 20 69 20 3c 20 6c 3b 20 69 2b 2b 29 r (; i < l; i++)
01c0: 20 7b 0a 20 20 20 20 69 66 20 28 6f 62 6a 20 3d {. if (obj =
01d0: 20 61 72 67 73 5b 69 5d 29 20 7b 0a 20 20 20 20 args[i]) {.
01e0: 20 20 66 6f 72 20 28 63 6f 6e 73 74 20 6b 65 79 for (const key
01f0: 20 69 6e 20 6f 62 6a 29 20 7b 0a 20 20 20 20 20 in obj) {.
0200: 20 20 20 2f 2f 20 63 68 65 63 6b 20 69 66 20 74 // check if t
0210: 68 69 73 20 70 72 6f 70 65 72 74 79 20 6f 66 20 his property of
0220: 74 68 65 20 73 6f 75 72 63 65 20 6f 62 6a 65 63 the source objec
0230: 74 20 63 6f 75 6c 64 20 62 65 20 6f 76 65 72 72 t could be overr
0240: 69 64 64 65 6e 0a 20 20 20 20 20 20 20 20 69 66 idden. if
0250: 20 28 69 73 57 72 69 74 61 62 6c 65 28 73 72 63 (isWritable(src
0260: 2c 20 6b 65 79 29 29 0a 20 20 20 20 20 20 20 20 , key)).
0270: 20 20 73 72 63 5b 6b 65 79 5d 20 3d 20 6f 62 6a src[key] = obj
0280: 5b 6b 65 79 5d 0a 20 20 20 20 20 20 7d 0a 20 20 [key]. }.
0290: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e }. }. return
02a0: 20 73 72 63 0a 7d src.}