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 相关文章推荐
jquery实现多级下拉菜单的实例代码
Oct 02 Javascript
javascript为下拉列表动态添加数据项
May 23 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
Sep 04 Javascript
动态加载jQuery的方法
Jun 16 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
Sep 07 Javascript
JavaScript职责链模式概述
Sep 17 Javascript
Bootstrap基本样式学习笔记之按钮(4)
Dec 07 Javascript
原生JS实现简单放大镜效果
Feb 08 Javascript
解决Webpack 热部署检测不到文件变化的问题
Feb 22 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
Dec 10 Javascript
小程序自定义圆形进度条
Nov 17 Javascript
js实现上传图片到服务器
Apr 11 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数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
javascript继承之为什么要继承
2012/11/10 Javascript
纯文字版返回顶端的js代码
2013/08/01 Javascript
javascript浏览器兼容教程之事件处理
2014/06/09 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
jquery把int类型转换成字符串类型的方法
2016/10/07 Javascript
jQuery实现鼠标悬停3d菜单展开动画效果
2017/01/19 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
js数组去重的N种方法(小结)
2018/06/07 Javascript
layDate插件设置开始和结束时间
2018/11/15 Javascript
小程序从手动埋点到自动埋点的实现方法
2019/01/24 Javascript
构建大型 Vue.js 项目的10条建议(小结)
2019/11/14 Javascript
Python字符串切片操作知识详解
2016/03/28 Python
PyQt5实现简单数据标注工具
2019/03/18 Python
浅谈python3中input输入的使用
2019/08/02 Python
python3实现网页版raspberry pi(树莓派)小车控制
2020/02/12 Python
python 瀑布线指标编写实例
2020/06/03 Python
对python中list的五种查找方法说明
2020/07/13 Python
用HTML5实现网站在windows8中贴靠的方法
2013/04/21 HTML / CSS
去加拿大的旅行和假期:Canadian Affair
2016/10/25 全球购物
美国波道夫·古德曼百货官网:Bergdorf Goodman
2017/11/07 全球购物
Linux面试题LINUX系统类
2015/11/25 面试题
大学生自我鉴定
2013/12/16 职场文书
化妆品促销方案
2014/02/24 职场文书
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
党员批评与自我批评
2014/10/15 职场文书
2015年毕业生个人自荐书
2015/03/24 职场文书
余世维讲座观后感
2015/06/11 职场文书
《猴王出世》教学反思
2016/02/23 职场文书
Apache Pulsar结合Hudi构建Lakehouse方案分析
2022/03/31 Servers
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js