javascript实现yield的方法


Posted in Javascript onNovember 06, 2013

没想到代码一次测试成功.~~只不过是FF下面,修改一下支持IE了。由于IE不认function表达式.

       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中的引用绑定到当前的上下文中,这样fn中的yield才会引用到我们定义的yield函数。

        注意一下,如果你需要在coroutine里访问其他this上下文,需要向iterator传递进去, 如 example.

Javascript 相关文章推荐
js Array对象的扩展函数代码
Apr 24 Javascript
Jquery下EasyUI组件中的DataGrid结果集清空方法
Jan 06 Javascript
js Object2String方便查看js对象内容
Nov 24 Javascript
实现JavaScript的组成----BOM和DOM详解
May 18 Javascript
JavaScript 函数节流详解及方法总结
Feb 09 Javascript
jquery 仿锚点跳转到页面指定位置的实例
Feb 14 Javascript
详解webpack与SPA实践之开发环境搭建
Dec 18 Javascript
json数据传到前台并解析展示成列表的方法
Aug 06 Javascript
vue draggable resizable gorkys与v-chart使用与总结
Sep 05 Javascript
浅谈layui里的上传控件问题
Sep 26 Javascript
基于vue 动态菜单 刷新空白问题的解决
Aug 06 Javascript
JavaScript语法约定和程序调试原理解析
Nov 03 Javascript
Javascript事件实例详解
Nov 06 #Javascript
zTree插件之多选下拉菜单实例代码
Nov 06 #Javascript
Jquery ajax执行顺序 返回自定义错误信息(实例讲解)
Nov 06 #Javascript
Js参数值中含有单引号或双引号问题的解决方法
Nov 06 #Javascript
浅析Js中的单引号与双引号问题
Nov 06 #Javascript
表单元素与非表单元素刷新区别详细解析
Nov 06 #Javascript
js onclick事件传参讲解
Nov 06 #Javascript
You might like
windows下升级PHP到5.3.3的过程及注意事项
2010/10/12 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
JavaScript NaN和Infinity特殊值 [译]
2012/09/20 Javascript
jQuery性能优化28条建议你值得借鉴
2013/02/16 Javascript
在jQuery中 关于json空对象筛选替换
2013/04/15 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
2015/12/08 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
2016/11/05 Javascript
微信小程序模板之分页滑动栏
2017/02/10 Javascript
JS模拟超市简易收银台小程序代码解析
2017/08/18 Javascript
javascript使用正则实现去掉字符串前面的所有0
2018/07/23 Javascript
利用vue.js把静态json绑定bootstrap的table方法
2018/08/28 Javascript
Vue初始化中的选项合并之initInternalComponent详解
2020/06/11 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
[35:34]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
Python性能分析工具Profile使用实例
2019/11/19 Python
利用Python优雅的登录校园网
2020/10/21 Python
深入浅析HTML5中的article和section的区别
2018/05/15 HTML / CSS
海信商城:海信电视、科龙空调、容声冰箱官方专卖
2017/02/07 全球购物
Hotter Shoes英国官网:英伦风格,舒适的鞋子
2017/12/28 全球购物
MATCHESFASHION.COM美国官网:英国奢侈品零售商
2018/10/29 全球购物
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
中国梦我的梦演讲稿
2014/04/23 职场文书
施工安全标语
2014/06/07 职场文书
停车位租赁协议书
2014/09/24 职场文书
社区灵活就业证明
2014/11/03 职场文书
信访工作个人总结
2015/03/03 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
详解Laravel框架的依赖注入功能
2021/05/27 PHP