国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

javascript實(shí)現(xiàn)yield的方法

2019-11-20 21:46:25
字體:
供稿:網(wǎng)友

沒想到代碼一次測試成功.~~只不過是FF下面,修改一下支持IE了。由于IE不認(rèn)function表達(dá)式.

復(fù)制代碼 代碼如下:

       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);

其中有一個技巧:

        fn = eval(fn.toString())

        用于將fn中的引用綁定到當(dāng)前的上下文中,這樣fn中的yield才會引用到我們定義的yield函數(shù)。

        注意一下,如果你需要在coroutine里訪問其他this上下文,需要向iterator傳遞進(jìn)去, 如 example.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 钟山县| 西畴县| 绥中县| 南陵县| 兴义市| 额济纳旗| 涿州市| 平湖市| 磐安县| 成武县| 治县。| 北票市| 肥东县| 宣城市| 宁国市| 祁连县| 屏边| 德保县| 英吉沙县| 明星| 辽中县| 昭通市| 庆阳市| 承德市| 利辛县| 蒙山县| 苗栗市| 岳普湖县| 重庆市| 富顺县| 太仓市| 清河县| 台东县| 邯郸县| 江源县| 垣曲县| 定襄县| 札达县| 武乡县| 河北省| 搜索|