You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

пре 3 година
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /**
  2. * Module dependencies.
  3. */
  4. var type;
  5. try {
  6. type = require('component-type');
  7. } catch (_) {
  8. type = require('type');
  9. }
  10. /**
  11. * Module exports.
  12. */
  13. module.exports = clone;
  14. /**
  15. * Clones objects.
  16. *
  17. * @param {Mixed} any object
  18. * @api public
  19. */
  20. function clone(obj){
  21. switch (type(obj)) {
  22. case 'object':
  23. var copy = {};
  24. for (var key in obj) {
  25. if (obj.hasOwnProperty(key)) {
  26. copy[key] = clone(obj[key]);
  27. }
  28. }
  29. return copy;
  30. case 'array':
  31. var copy = new Array(obj.length);
  32. for (var i = 0, l = obj.length; i < l; i++) {
  33. copy[i] = clone(obj[i]);
  34. }
  35. return copy;
  36. case 'regexp':
  37. // from millermedeiros/amd-utils - MIT
  38. var flags = '';
  39. flags += obj.multiline ? 'm' : '';
  40. flags += obj.global ? 'g' : '';
  41. flags += obj.ignoreCase ? 'i' : '';
  42. return new RegExp(obj.source, flags);
  43. case 'date':
  44. return new Date(obj.getTime());
  45. default: // string, number, boolean, …
  46. return obj;
  47. }
  48. }