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实际应用:innerHTMl和确认提示的使用
Jun 22 Javascript
input的focus方法使用
Mar 13 Javascript
javascript实现iframe框架延时加载的方法
Oct 30 Javascript
详解JavaScript逻辑And运算符
Dec 04 Javascript
Angular实现form自动布局
Jan 28 Javascript
JavaScript正则表达式匹配 div  style标签
Mar 15 Javascript
总结JavaScript三种数据存储方式之间的区别
May 03 Javascript
js和jq使用submit方法无法提交表单的快速解决方法
May 17 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
Sep 26 Javascript
整理关于Bootstrap导航的慕课笔记
Mar 29 Javascript
微信小程序实现tab和swiper切换结合效果
Jul 17 Javascript
实例详解Node.js 函数
Jun 10 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
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
PHP实现的微信公众号扫码模拟登录功能示例
2019/05/30 PHP
基于jquery的跨域调用文件
2010/11/19 Javascript
简单几行JS Code实现IE邮件转发新浪微博
2013/07/03 Javascript
如何编写高质量JS代码
2014/12/28 Javascript
jquery判断页面网址是否有效的两种方法
2016/12/11 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
2017/04/11 Javascript
深入理解vue-router之keep-alive
2017/08/31 Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
2017/11/22 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
2018/06/19 Javascript
解决vue.js this.$router.push无效的问题
2018/09/03 Javascript
使用react context 实现vue插槽slot功能
2019/07/18 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
对pycharm 修改程序运行所需内存详解
2018/12/03 Python
python构建基础的爬虫教学
2018/12/23 Python
自适应线性神经网络Adaline的python实现详解
2019/09/30 Python
pycharm显示远程图片的实现
2019/11/04 Python
python之列表推导式的用法
2019/11/29 Python
PyQt使用QPropertyAnimation开发简单动画
2020/04/02 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
2020/04/23 Python
让Django的BooleanField支持字符串形式的输入方式
2020/05/20 Python
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
大宝sod蜜广告词
2014/03/21 职场文书
慰问敬老院活动总结
2014/04/26 职场文书
支部鉴定材料
2014/06/02 职场文书
房屋租赁委托书范本
2014/10/04 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
收费员岗位职责
2015/02/14 职场文书
新员工试用期自我评价
2015/03/10 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书
党员干部廉洁自律承诺书
2015/04/28 职场文书
2015年乡镇科普工作总结
2015/05/13 职场文书
2015中学学校工作总结
2015/07/20 职场文书
单身狗福利?Python爬取某婚恋网征婚数据
2021/06/03 Python