//es6
function* letters() {
console.log('a');
yield 'a';
console.log('b');
yield 'b';
while (true) {
console.log('c');
yield 'c';
}
}
//polyfilling es5
function letters() {
var state = 0;
return {
next: function() {
switch (state) {
case 0:
console.log('a');
state = 1;
return {
value: 'a', // Return the first yielded value.
done: false
};
case 1:
console.log('b');
state = 2;
return {
value: 'b', // Return the second yielded value.
done: false
};
case 2:
console.log('c');
return {
value: 'c', // Return the third yielded value... forever.
done: false
};
}
}
};
}
简述:上述方法只是 通过肉眼观察原函数 的内部代码 来编写polyfilling 的代码,可以从原函数的3个yield和polyfilling之后的3个case可以看出,
故猜想:真正的polyfill应该是代码根据原函数生成yield,先将原函数toString,用正则匹配来分析yield, 对于原函数里面的循环(for while ....),应对应生成迭代器
上述猜想待完善中......