deepClone.js 941 B

12345678910111213141516171819202122232425262728293031323334
  1. /**
  2. * @desc 深拷贝,支持常见类型
  3. * @param {Any} values
  4. */
  5. function deepClone(values) {
  6. var copy;
  7. // Handle the 3 simple types, and null or undefined
  8. if (null == values || "object" != typeof values) return values;
  9. // Handle Date
  10. if (values instanceof Date) {
  11. copy = new Date();
  12. copy.setTime(values.getTime());
  13. return copy;
  14. };
  15. // Handle Array
  16. if (values instanceof Array) {
  17. copy = [];
  18. for (var i = 0, len = values.length; i < len; i++) {
  19. copy[i] = deepClone(values[i]);
  20. };
  21. return copy;
  22. };
  23. // Handle Object
  24. if (values instanceof Object) {
  25. copy = {};
  26. for (var attr in values) {
  27. if (values.hasOwnProperty(attr)) copy[attr] = deepClone(values[attr]);
  28. };
  29. return copy;
  30. };
  31. throw new Error("Unable to copy values! Its type isn't supported.");
  32. };
  33. module.exports = deepClone;