object-assign.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /*
  2. * Object.assign(), described in E6 Section 19.1.2.1
  3. *
  4. * http://www.ecma-international.org/ecma-262/6.0/index.html#sec-object.assign
  5. */
  6. if (typeof Object.assign === 'undefined') {
  7. Object.defineProperty(Object, 'assign', {
  8. value: function (target) {
  9. var i, n, j, m, k;
  10. var source, keys;
  11. var gotError;
  12. var pendingError;
  13. if (target == null) {
  14. throw new Exception('target null or undefined');
  15. }
  16. for (i = 1, n = arguments.length; i < n; i++) {
  17. source = arguments[i];
  18. if (source == null) {
  19. continue; // null or undefined
  20. }
  21. source = Object(source);
  22. keys = Object.keys(source); // enumerable own keys
  23. for (j = 0, m = keys.length; j < m; j++) {
  24. k = keys[j];
  25. try {
  26. target[k] = source[k];
  27. } catch (e) {
  28. if (!gotError) {
  29. gotError = true;
  30. pendingError = e;
  31. }
  32. }
  33. }
  34. }
  35. if (gotError) {
  36. throw pendingError;
  37. }
  38. }, writable: true, enumerable: false, configurable: true
  39. });
  40. }