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面向对象编程
Mar 02 Javascript
两个select多选模式的选项相互移动(示例代码)
Jan 11 Javascript
php析构函数的具体用法小结
Mar 11 Javascript
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
Oct 11 Javascript
JavaScript实现的圆形浮动标签云效果实例
Aug 06 Javascript
js实现图片放大和拖拽特效代码分享
Sep 05 Javascript
JavaScript手机振动API
Jun 11 Javascript
解析AngularJS中get请求URL出现的跨域问题
Dec 01 Javascript
基于jquery实现九宫格拼图小游戏
Nov 30 jQuery
vue插件draggable实现拖拽移动图片顺序
Dec 01 Javascript
LayUI数据接口返回实体封装的例子
Sep 12 Javascript
修改vue源码实现动态路由缓存的方法
Jan 21 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生成HTML静态页面实例代码
2008/08/31 PHP
php通过sort()函数给数组排序的方法
2015/03/18 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
2020/04/23 PHP
用javascript动态调整iframe高度的方法
2007/03/06 Javascript
javascript innerText和innerHtml应用
2010/01/28 Javascript
分享一款基于jQuery的视频播放插件
2014/10/09 Javascript
ExpressJS入门实例
2015/01/14 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
jQuery实现文字自动横移
2017/01/08 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
微信小程序教程系列之视图层的条件渲染(10)
2017/04/19 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
2018/08/17 Javascript
解决vue.js this.$router.push无效的问题
2018/09/03 Javascript
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
2019/02/02 NodeJs
vue图片裁剪插件vue-cropper使用方法详解
2020/12/16 Vue.js
[30:51]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第一局
2016/03/04 DOTA
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
跟老齐学Python之dict()的操作方法
2014/09/24 Python
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
详解配置Django的Celery异步之路踩坑
2018/11/25 Python
wxPython实现列表增删改查功能
2019/11/19 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
selenium与xpath之获取指定位置的元素的实现
2021/01/26 Python
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
阿迪达斯新加坡官方网站:adidas新加坡
2019/12/06 全球购物
医药营销专业个人自荐信
2013/09/29 职场文书
开工庆典邀请函范文
2014/01/16 职场文书
合作意向书范本
2014/03/31 职场文书
音乐课《小猫钓鱼》教学反思
2016/02/18 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
Go各时间字符串使用解析
2021/04/02 Golang
Nginx配置根据url参数重定向
2022/04/11 Servers