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)文章
編寫(xiě)更好的JavaScript條件式和匹配條件的技巧(小結(jié))
這篇文章主要介紹了編寫(xiě)更好的JavaScript條件式和匹配條件的技巧(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
移動(dòng)端touch拖動(dòng)和click事件沖突問(wèn)題解決
這篇文章主要為大家介紹了移動(dòng)端touch拖動(dòng)和click事件沖突問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
微信小程序左滑動(dòng)顯示菜單功能的實(shí)現(xiàn)
這篇文章主要介紹了微信小程序左滑動(dòng)顯示菜單功能的實(shí)現(xiàn),代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06
淺析JSONP技術(shù)原理及實(shí)現(xiàn)
這篇文章主要介紹了淺析JSONP技術(shù)原理及實(shí)現(xiàn) 的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
JavaScript手寫(xiě)一個(gè)前端存儲(chǔ)工具庫(kù)
在項(xiàng)目開(kāi)發(fā)的過(guò)程中,為了減少提高性能,減少請(qǐng)求,開(kāi)發(fā)者往往需要將一些不易改變的數(shù)據(jù)放入本地緩存中。本文就來(lái)用JavaScript手寫(xiě)一個(gè)前端存儲(chǔ)工具庫(kù),希望對(duì)大家有所幫助2023-02-02
javascript定時(shí)保存表單數(shù)據(jù)的代碼
我相信有不少TX用過(guò)QQ或163的郵箱吧?他們中有一個(gè)比較有用且有趣的功能,如果您在編寫(xiě)郵件,那在固定一個(gè)時(shí)間頻率內(nèi),它會(huì)自動(dòng)將您的郵件內(nèi)容保存起來(lái),以免丟失。2011-03-03
JavaScript中判斷變量是數(shù)組、函數(shù)或是對(duì)象類(lèi)型的方法
這篇文章主要介紹了JavaScript中判斷變量是數(shù)組、函數(shù)或是對(duì)象類(lèi)型的方法,需要的朋友可以參考下2015-02-02

