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 相关文章推荐
encode脚本和normal脚本混用的问题与解决方法
Mar 08 Javascript
jQuery实现用户注册的表单验证示例
Aug 28 Javascript
获取select元素被选中的文本内容的js代码
Jan 29 Javascript
基于jquery的手风琴图片展示效果实现方法
Dec 16 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
May 16 Javascript
ajax跨域调用webservice的实现代码
May 09 Javascript
js仿百度切换皮肤功能(html+css)
Jul 10 Javascript
jQuery实现图片轮播效果代码
Sep 27 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
Dec 08 Javascript
js+html5生成自动排列对话框实例
Oct 09 Javascript
vue axios请求拦截实例代码
Mar 29 Javascript
Vue下滚动到页面底部无限加载数据的示例代码
Apr 22 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
PHP5中Cookie与 Session使用详解
2013/04/30 PHP
一个好用的PHP验证码类实例分享
2013/12/27 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
PHP结合Ueditor并修改图片上传路径
2016/10/16 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
Laravel解决nesting level错误和隐藏index.php的问题
2019/10/12 PHP
基于jquery的图片轮播 tab切换组件
2012/07/19 Javascript
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
第一次接触JS require.js模块化工具
2016/04/17 Javascript
浅析JavaScript中break、continue和return的区别
2016/11/30 Javascript
JavaScript实现各种排序的代码详解
2017/08/28 Javascript
vue实现提示保存后退出的方法
2018/03/15 Javascript
angular多语言配置详解
2019/05/16 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
JS 数组基本用法入门示例解析
2020/01/16 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
jQuery实现查看图片功能
2020/12/01 jQuery
[02:39]我与DAC之Newbee.Moogy:从论坛到TI
2018/03/26 DOTA
Python实现爬取知乎神回复简单爬虫代码分享
2015/01/04 Python
Django中处理出错页面的方法
2015/07/15 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
2018/09/04 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
Python Django Cookie 简单用法解析
2019/08/13 Python
基于Python fminunc 的替代方法
2020/02/29 Python
HTML5的自定义属性data-*详细介绍和JS操作实例
2014/04/10 HTML / CSS
布鲁明戴尔百货店:Bloomingdale’s
2016/12/21 全球购物
旅游管理本科生求职信
2013/10/14 职场文书
国际商务英语专业求职信
2014/07/08 职场文书
日语系毕业求职信
2014/07/27 职场文书
导游词之扬州大明寺
2019/10/09 职场文书
python实现自定义日志的具体方法
2021/05/28 Python
nodejs利用readline提示输入内容实例代码
2021/07/15 NodeJs
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis