/
/
省略了一大堆其他的代码,完整版 https:
/
/
github.com
/
inexorabletash
/
polyfill
/
blob
/
master
/
es6.js
/
/
22.1
.
2.1
Array.
from
( items [ , mapfn [ , thisArg ] ] )
define(
Array,
'from'
,
function
from
(items) {
var c
=
strict(this);
/
/
this 就是 function() {
return
oobArray }
/
/
判断是否可以迭代
var usingIterator
=
GetMethod(items, $$iterator);
if
(usingIterator !
=
=
undefined) {
if
(IsConstructor(c)) {
/
/
IsConstructor函数检查对象是否为构造函数,此处返回true
/
*
当代码 new Foo(...) 执行时,会发生以下事情:
1.
一个继承自 Foo.prototype 的新对象被创建。
2.
使用指定的参数调用构造函数 Foo,并将 this 绑定到新创建的对象。new Foo 等同于 new Foo(),也就是没有指定参数列表,Foo 不带任何参数调用的情况。
3.
由构造函数返回的对象就是 new 表达式的结果。如果构造函数没有显式返回一个对象,则使用步骤
1
创建的对象。(一般情况下,构造函数不返回值,但是用户可以选择主动返回对象,来覆盖正常的对象创建步骤)
*
/
var a
=
new c();
/
/
结合上面这么一大堆字,可以得出 a
=
oobArray
}
else
{
a
=
new Array(
0
);
}
var iterator
=
GetIterator(items, usingIterator);
var k
=
0
;
while
(true) {
var
next
=
IteratorStep(iterator);
if
(
next
=
=
=
false) {
a.length
=
k;
/
/
oobArray.length
=
k
return
a;
/
/
return
oobArray
}
a[k]
=
mappedValue;
/
/
oobArray[k]
=
mappedValue
k
+
=
1
;
}
}});