$.object-assign.js 1.1 KB

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