function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
    var O = _toObject(arrayLike);
    var C = typeof this == 'function' ? this : Array;
    var aLen = arguments.length;
    var mapfn = aLen > 1 ? arguments[1] : undefined;
    var mapping = mapfn !== undefined;
    var index = 0;
    var iterFn = core_getIteratorMethod(O);
    var length, result, step, iterator;
    if (mapping) mapfn = _ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
    // if object isn't iterable or it's array with default iterator - use simple case
    if (iterFn != undefined && !(C == Array && _isArrayIter(iterFn))) {
      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {
        _createProperty(result, index, mapping ? _iterCall(iterator, mapfn, [step.value, index], true) : step.value);
      }
    } else {
      length = _toLength(O.length);
      for (result = new C(length); length > index; index++) {
        _createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
      }
    }
    result.length = index;
    return result;
  }
function from(arrayLike ) {
    var O = _toObject(arrayLike);
    var C = typeof this == 'function' ? this : Array;
    var aLen = arguments.length;
    var mapfn = aLen > 1 ? arguments[1] : undefined;
    var mapping = mapfn !== undefined;
    var index = 0;
    var iterFn = core_getIteratorMethod(O);
    var length, result, step, iterator;
    if (mapping) mapfn = _ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
    
    if (iterFn != undefined && !(C == Array && _isArrayIter(iterFn))) {
      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {
        _createProperty(result, index, mapping ? _iterCall(iterator, mapfn, [step.value, index], true) : step.value);
      }
    } else {
      length = _toLength(O.length);
      for (result = new C(length); length > index; index++) {
        _createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
      }
    }
    result.length = index;
    return result;
  }
function from ( arrayLike /* , mapfn = undefined, thisArg = undefined */ ) { var O = _toObject ( arrayLike ) ; var C = typeof this == 'function' ? this : Array ; var aLen = arguments . length ; var mapfn = aLen > 1 ? arguments [ 1 ] : undefined ; var mapping = mapfn !== undefined ; var index = 0 ; var iterFn = core_getIteratorMethod ( O ) ; var length , result , step , iterator ; if ( mapping ) mapfn = _ctx ( mapfn , aLen > 2 ? arguments [ 2 ] : undefined , 2 ) ; // if object isn't iterable or it's array with default iterator - use simple case if ( iterFn != undefined && ! ( C == Array && _isArrayIter ( iterFn ) ) ) { for ( iterator = iterFn . call ( O ) , result = new C ( ) ; ! ( step = iterator . next ( ) ) . done ; index ++ ) { _createProperty ( result , index , mapping ? _iterCall ( iterator , mapfn , [ step . value , index ] , true ) : step . value ) ; } } else { length = _toLength ( O . length ) ; for ( result = new C ( length ) ; length > index ; index ++ ) { _createProperty ( result , index , mapping ? mapfn ( O [ index ] , index ) : O [ index ] ) ; } } result . length = index ; return result ; }
22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)
22 . 1 . 2 . 1 Array . from ( arrayLike mapfn = undefined thisArg = undefined )