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 相关文章推荐
JS 统计时间
Mar 09 Javascript
js function使用心得
May 10 Javascript
分页栏的web标准实现
Nov 01 Javascript
使用JS 清空File控件的路径值
Jul 08 Javascript
JavaScript 32位整型无符号操作示例
Dec 08 Javascript
javascript中的throttle和debounce浅析
Jun 06 Javascript
《JavaScript DOM 编程艺术》读书笔记之DOM基础
Jan 09 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
Mar 16 Javascript
Vue文件配置全局变量的实例
Sep 06 Javascript
详解一个基于套接字实现长连接的express
Mar 28 Javascript
微信小程序如何获取用户头像和昵称
Sep 23 Javascript
原生js实现拖拽移动与缩放效果
Aug 24 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和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
PHP Trait代码复用类与多继承实现方法详解
2019/06/17 PHP
精通JavaScript 纠正 cleanWhitespace函数
2010/03/11 Javascript
23个超流行的jQuery相册插件整理分享
2011/04/25 Javascript
js改变文章字体大小的实例代码
2013/11/27 Javascript
一个判断抢购时间是否到达的简单的js函数
2014/06/23 Javascript
javascript中的this详解
2014/12/08 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
JS获取元素多层嵌套思路详解
2016/05/16 Javascript
浅谈Javascript数据属性与访问器属性
2016/07/26 Javascript
BootStrap Typeahead自动补全插件实例代码
2016/08/10 Javascript
javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结
2016/10/10 Javascript
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
2017/08/17 jQuery
Angular6 正则表达式允许输入部分中文字符
2018/09/10 Javascript
vue打包相关细节整理(小结)
2018/09/28 Javascript
详解Vue中watch的详细用法
2018/11/28 Javascript
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
可拖拽组件slider.js使用方法详解
2020/12/04 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
Python列表(list)常用操作方法小结
2015/02/02 Python
Python写的一个定时重跑获取数据库数据
2016/12/28 Python
python获取外网IP并发邮件的实现方法
2017/10/01 Python
Django中url的反向查询的方法
2018/03/14 Python
python3处理含有中文的url方法
2018/05/10 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
为什么称python为胶水语言
2020/06/16 Python
selenium如何定位span元素的实现
2021/01/13 Python
html5 localStorage本地存储_动力节点Java学院整理
2017/07/06 HTML / CSS
大学自我鉴定
2013/12/20 职场文书
运动会稿件50字
2014/02/17 职场文书
大学生就业自我推荐信
2014/05/10 职场文书
机械操作工岗位职责
2014/08/08 职场文书
2014年房产经纪人工作总结
2014/12/08 职场文书
家长对学校的意见和建议
2015/06/03 职场文书
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL