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实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
Apr 20 Javascript
原生js实现跨浏览器获取鼠标按键的值
Apr 08 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
Jun 24 Javascript
通过location.replace禁止浏览器后退防止重复提交
Sep 04 Javascript
JS选项卡动态替换banner图片路径的方法
May 11 Javascript
总结JavaScript的正则与其他语言的不同之处
Aug 25 Javascript
JS简单获取当前年月日星期的方法示例
Feb 07 Javascript
基于JavaScript表单脚本(详解)
Oct 18 Javascript
Vue filter介绍及其使用详解
Oct 21 Javascript
vue+webpack 更换主题N种方案优劣分析
Oct 28 Javascript
小程序实现图片移动缩放效果
May 26 Javascript
threejs太阳光与阴影效果实例代码
Apr 05 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编写一个简单的路由类
2011/04/13 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
2013/08/01 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
php递归遍历多维数组的方法
2015/04/18 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
Zend Framework动作控制器用法示例
2016/12/09 PHP
PHP递归算法的简单实例
2019/02/28 PHP
TBCompressor js代码压缩
2011/01/05 Javascript
jQuery验证Checkbox是否选中的代码 推荐
2011/09/04 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
单击按钮显示隐藏子菜单经典案例
2013/01/04 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
js 加密压缩出现bug解决方案
2014/11/25 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
Jquery日期选择datepicker插件用法实例分析
2015/06/08 Javascript
js编写贪吃蛇的小游戏
2020/08/24 Javascript
jQuery select自动选中功能实现方法分析
2016/11/28 Javascript
element-ui表格合并span-method的实现方法
2019/05/21 Javascript
150行Node.js实现的dns代理工具
2019/08/02 Javascript
如何利用JavaScript编写一个格斗小游戏
2021/01/06 Javascript
Python Web开发模板引擎优缺点总结
2014/05/06 Python
分析Python的Django框架的运行方式及处理流程
2015/04/08 Python
Python实现自动为照片添加日期并分类的方法
2017/09/30 Python
浅析python实现scrapy定时执行爬虫
2018/03/04 Python
Python3爬虫中Selenium的用法详解
2020/07/10 Python
next在python中返回迭代器的实例方法
2020/12/15 Python
Banana Republic欧盟:美国都市简约风格的代表品牌
2018/05/09 全球购物
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
linux面试相关问题
2013/04/28 面试题
2013年员工自我评价范文
2013/12/27 职场文书
酒店保安领班职务说明书
2014/03/04 职场文书
银行反四风对照检查材料
2014/09/29 职场文书
应聘教师求职信范文
2015/03/20 职场文书
新闻稿怎么写
2015/07/18 职场文书
Vue3.0 手写放大镜效果
2021/07/25 Vue.js
apache ftpserver搭建ftp服务器
2022/05/20 Servers