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 URL参数读取改进版
Jan 16 Javascript
JS判断客服QQ号在线还是离线状态的方法
Jan 13 Javascript
js带前后翻页的图片切换效果代码分享
Sep 08 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
Nov 26 Javascript
javascirpt实现2个iframe之间传值的方法
Jun 30 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
Sep 27 Javascript
Angular directive递归实现目录树结构代码实例
May 05 Javascript
动态统计当前输入内容的字节、字符数的实例详解
Oct 27 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
Dec 07 Javascript
详解在vue-test-utils中mock全局对象
Nov 07 Javascript
微信小程序实现展示评分结果功能
Feb 15 Javascript
JS实现滚动条触底加载更多
Sep 19 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,不用COM,生成excel文件
2006/10/09 PHP
php错误提示failed to open stream: HTTP request failed!的完美解决方法
2011/06/06 PHP
php 批量替换html标签的实例代码
2013/11/26 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
2018/05/10 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
2010/03/20 Javascript
超级24小时弹窗代码 24小时退出弹窗代码 100%弹窗代码(IE only)
2010/06/11 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
2011/10/06 Javascript
JS trim去空格的最佳实践
2011/10/30 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
JavaScript数组前面插入元素的方法
2015/04/06 Javascript
jquery实现很酷的网页顶部图标下拉菜单效果
2015/08/22 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
响应式表格之固定表头的简单实现
2016/08/26 Javascript
JS实现JSON.stringify的实例代码讲解
2017/02/07 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
基于jQuery的$.getScript方法去加载javaScript文档解析
2017/11/08 jQuery
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
vue的$http的get请求要加上params操作
2020/11/12 Javascript
跟老齐学Python之??碌某?? target=
2014/09/12 Python
python编程线性回归代码示例
2017/12/07 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
jupyter notebook中新建cell的方法与快捷键操作
2020/04/22 Python
Python3 ffmpeg视频转换工具使用方法解析
2020/08/10 Python
Python 按比例获取样本数据或执行任务的实现代码
2020/12/03 Python
HTML5 3D旋转相册的实现示例
2019/12/03 HTML / CSS
项目计划书范文
2014/01/09 职场文书
教师辞职报告范文
2014/01/20 职场文书
青年文明号复核材料
2014/02/11 职场文书
房地产财务部员工岗位职责
2014/03/12 职场文书
质量保证书范本
2014/04/29 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
OpenCV项目实践之停车场车位实时检测
2022/04/11 Python