_object-assign.js 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. 'use strict';
  2. // 19.1.2.1 Object.assign(target, source, ...)
  3. var getKeys = require('./_object-keys')
  4. , gOPS = require('./_object-gops')
  5. , pIE = require('./_object-pie')
  6. , toObject = require('./_to-object')
  7. , IObject = require('./_iobject')
  8. , $assign = Object.assign;
  9. // should work with symbols and should have deterministic property order (V8 bug)
  10. module.exports = !$assign || require('./_fails')(function(){
  11. var A = {}
  12. , B = {}
  13. , S = Symbol()
  14. , K = 'abcdefghijklmnopqrst';
  15. A[S] = 7;
  16. K.split('').forEach(function(k){ B[k] = k; });
  17. return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
  18. }) ? function assign(target, source){ // eslint-disable-line no-unused-vars
  19. var T = toObject(target)
  20. , aLen = arguments.length
  21. , index = 1
  22. , getSymbols = gOPS.f
  23. , isEnum = pIE.f;
  24. while(aLen > index){
  25. var S = IObject(arguments[index++])
  26. , keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)
  27. , length = keys.length
  28. , j = 0
  29. , key;
  30. while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];
  31. } return T;
  32. } : $assign;