| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 | | 'use strict' |  |   |  | module.exports = clone |  |   |  | var getPrototypeOf = Object.getPrototypeOf || function (obj) { |  |   return obj.__proto__ |  | } |  |   |  | function clone (obj) { |  |   if (obj === null || typeof obj !== 'object') |  |     return obj |  |   |  |   if (obj instanceof Object) |  |     var copy = { __proto__: getPrototypeOf(obj) } |  |   else |  |     var copy = Object.create(null) |  |   |  |   Object.getOwnPropertyNames(obj).forEach(function (key) { |  |     Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key)) |  |   }) |  |   |  |   return copy |  | } | 
 |