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中json对象和string对象之间相互转化
Dec 26 Javascript
使用js实现一个可编辑的select下拉列表
Feb 20 Javascript
jquery-syntax动态语法着色示例代码
May 14 Javascript
jQuery中ajax的get()方法用法实例
Dec 26 Javascript
Javascript获取表单名称(name)的方法
Apr 02 Javascript
Bootstrap学习笔记之css组件(3)
Jun 07 Javascript
JQuery手速测试小游戏实现思路详解
Sep 20 Javascript
angular2中使用第三方js库的实例
Feb 26 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
Sep 04 Javascript
JavaScript 性能提升之路(推荐)
Apr 10 Javascript
vue 引用自定义ttf、otf、在线字体的方法
May 09 Javascript
gojs实现蚂蚁线动画效果
Feb 18 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
实用函数7
2007/11/08 PHP
PHP内置过滤器FILTER使用实例
2014/06/25 PHP
PHPCMS2008广告模板SQL注入漏洞修复
2016/10/11 PHP
CakePHP框架Session设置方法分析
2017/02/23 PHP
php微信公众号开发之二级菜单
2018/10/20 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
2020/04/07 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
Prototype 学习 工具函数学习($方法)
2009/07/12 Javascript
网站导致浏览器崩溃的原因总结(多款浏览器) 推荐
2010/04/15 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
2016/05/09 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
2017/04/21 jQuery
VueJs 搭建Axios接口请求工具
2017/11/20 Javascript
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
Angular使用操作事件指令ng-click传多个参数示例
2018/03/27 Javascript
React中使用UEditor百度富文本的方法
2018/08/22 Javascript
React 源码中的依赖注入方法
2018/11/07 Javascript
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
[54:02]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 IG vs VGJ.T
2018/04/03 DOTA
django实现分页的方法
2015/05/26 Python
Python栈算法的实现与简单应用示例
2017/11/01 Python
关于django 数据库迁移(migrate)应该知道的一些事
2018/05/27 Python
Python 获取中文字拼音首个字母的方法
2018/11/28 Python
python自动从arxiv下载paper的示例代码
2020/12/05 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
2021/02/03 Python
英国顶级足球鞋的领先零售商:Lovell Soccer
2019/08/27 全球购物
日本酒店、民宿、温泉旅馆、当地旅行团中文预订:e路东瀛
2019/12/09 全球购物
基层干部2014全国两会学习心得体会
2014/03/10 职场文书
娱乐节目策划方案
2014/06/10 职场文书
2014优秀大学生简历自我评价
2014/09/15 职场文书
预备党员自我评价范文
2015/03/04 职场文书
公司保密管理制度
2015/08/04 职场文书
小学总务工作总结
2015/08/13 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书
react国际化react-intl的使用
2021/05/06 Javascript
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android