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 相关文章推荐
JavaScript常用对象的方法和属性小结
Jan 24 Javascript
关于js遍历表格的实例
Jul 10 Javascript
jquery中的$(document).ready()使用小结
Feb 14 Javascript
jQuery中clearQueue()方法用法实例
Dec 29 Javascript
深入理解JavaScript系列(28):设计模式之工厂模式详解
Mar 03 Javascript
window.location.reload 刷新使用分析(去对话框)
Nov 11 Javascript
JavaScript检测原始值、引用值、属性
Jun 20 Javascript
修改ligerui 默认确认按钮的方法
Dec 27 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
Jan 22 Javascript
vue 运用mock数据的示例代码
Nov 07 Javascript
vue计算属性和监听器实例解析
May 10 Javascript
微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现
Aug 19 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
PHP 写文本日志实现代码
2010/05/18 PHP
PHP页面实现定时跳转的方法
2014/10/31 PHP
PHP检测字符串是否为UTF8编码的常用方法
2014/11/21 PHP
深入理解PHP内核(一)
2015/11/10 PHP
用js实现的抽象CSS圆角效果!!
2007/05/03 Javascript
潜说js对象和数组
2011/05/25 Javascript
关于递归运算的顺序测试代码
2011/11/30 Javascript
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
在JavaScript中重写jQuery对象的方法实例教程
2014/08/25 Javascript
解决js函数闭包内存泄露问题的办法
2016/01/25 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
浅析Javascript ES6中的原生Promise
2016/08/25 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
js实现九宫格的随机颜色跳转
2017/02/19 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
微信小程序实现动态设置页面标题的方法【附源码下载】
2017/11/29 Javascript
vuex存储token示例
2019/11/11 Javascript
extjs4图表绘制之折线图实现方法分析
2020/03/06 Javascript
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
python使用range函数计算一组数和的方法
2015/05/07 Python
利用python微信库itchat实现微信自动回复功能
2017/05/18 Python
Python获取二维矩阵每列最大值的方法
2018/04/03 Python
Python实现的txt文件去重功能示例
2018/07/07 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
Flask项目中实现短信验证码和邮箱验证码功能
2019/12/05 Python
解决Jupyter notebook中.py与.ipynb文件的import问题
2020/04/21 Python
Monnier Frères美国官网:法国知名奢侈品网站
2016/11/22 全球购物
简历自我评价模版
2014/01/31 职场文书
企业党员一句话承诺
2014/05/30 职场文书
社区活动策划方案
2014/08/21 职场文书
党员干部民主生活会议批评与自我批评材料
2014/09/20 职场文书
骨干教师考核评语
2014/12/31 职场文书
Python 机器学习工具包SKlearn的安装与使用
2021/05/14 Python
Tomcat项目启动失败的原因和解决办法
2022/04/20 Servers