javascript實(shí)現(xiàn)yield的方法
沒(méi)想到代碼一次測(cè)試成功.~~只不過(guò)是FF下面,修改一下支持IE了。由于IE不認(rèn)function表達(dá)式.
var Iterator = function (fn) {
var coroutine = null;
var cofn_this = null;
var yield = function() {
coroutine.apply(cofn_this, arguments);
}
// support IE.
// NOTE: IE eval("function(){}") does not return a function object.
eval('fn = ' + fn.toString());
return function(cofn, cothis){
coroutine = cofn;
cofn_this = cothis;
return fn.apply(this)
};
}
Array.prototype.forEach = new Iterator(function () {
for (var i = 0; i < this.length; i ++) {
yield(this[i])
}
});
// example.
this.display = window.alert;
var A = [1,2,3,4,5];
A.forEach(function(it){
this.display(it)
}, this);
其中有一個(gè)技巧:
fn = eval(fn.toString())
用于將fn中的引用綁定到當(dāng)前的上下文中,這樣fn中的yield才會(huì)引用到我們定義的yield函數(shù)。
注意一下,如果你需要在coroutine里訪問(wèn)其他this上下文,需要向iterator傳遞進(jìn)去, 如 example.
相關(guān)文章
JavaScript設(shè)置獲取和設(shè)置屬性的方法
這篇文章主要介紹了JavaScript設(shè)置獲取和設(shè)置屬性的方法,學(xué)會(huì)使用getAttribute、setAttribute的用法,需要的朋友可以參考下2015-03-03原生javascript實(shí)現(xiàn)圖片無(wú)縫滾動(dòng)效果
這篇文章主要介紹了原生javascript實(shí)現(xiàn)圖片無(wú)縫滾動(dòng)效果的相關(guān)資料,需要的朋友可以參考下2016-02-02Js操作樹(shù)節(jié)點(diǎn)自動(dòng)折疊展開(kāi)的幾種方法
這篇文章主要介紹了Js操作樹(shù)節(jié)點(diǎn)自動(dòng)折疊展開(kāi)的幾種方法,需要的朋友可以參考下2014-05-05基于Web Audio API實(shí)現(xiàn)音頻可視化效果
這篇文章主要介紹了基于Web Audio API實(shí)現(xiàn)音頻可視化效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06JavaScript組件開(kāi)發(fā)之輸入框加候選框
本文給大家分享基于js組件開(kāi)發(fā)的輸入框加候選框的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下2017-03-03