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 相关文章推荐
json的定义、标准格式及json字符串检验
May 11 Javascript
Js控制滑轮左右滑动实例
Feb 13 Javascript
JavaScript实现图片轮播组件代码示例
Nov 22 Javascript
JavaScript自定义分页样式
Jan 17 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
Apr 21 Javascript
详解Node全局变量global模块
Sep 28 Javascript
JS实现的简单表单验证功能示例
Oct 13 Javascript
Vue实现动态创建和删除数据的方法
Mar 17 Javascript
vue slots 组件的组合/分发实例
Sep 06 Javascript
trackingjs+websocket+百度人脸识别API实现人脸签到
Nov 26 Javascript
layui实现checkbox的目录树tree的例子
Sep 12 Javascript
Vue3+elementui plus创建项目的方法
Dec 01 Vue.js
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类分享
2014/02/07 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
2015/11/23 PHP
在WordPress的文章编辑器中设置默认内容的方法
2015/12/29 PHP
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
jQuery中的bind绑定事件与文本框改变事件的临时解决方法
2010/08/13 Javascript
浅谈 jQuery 事件源码定位问题
2014/06/18 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
2016/06/18 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
String字符串截取的四种方式总结
2016/11/28 Javascript
vue.js的安装方法
2017/05/12 Javascript
JavaScript学习笔记之DOM操作实例分析
2019/01/08 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
2019/01/18 Javascript
JS数组扁平化、去重、排序操作实例详解
2020/02/24 Javascript
js实现超级玛丽小游戏
2020/03/18 Javascript
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
js实现鼠标拖曳效果
2020/12/30 Javascript
Python 开发Activex组件方法
2009/11/08 Python
深入理解 Python 中的多线程 新手必看
2016/11/20 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
python字符串替换re.sub()方法解析
2019/09/18 Python
python实现读取类别频数数据画水平条形图案例
2020/04/24 Python
关于iframe跨域使用postMessage的实现
2019/10/29 HTML / CSS
国际知名设计师时装商店:Coggles
2016/09/05 全球购物
英国马匹装备和马术用品购物网站:Equine Superstore
2019/03/03 全球购物
Shell如何接收变量输入
2016/08/06 面试题
在校生自我鉴定
2014/01/23 职场文书
大学同学十年聚会感言
2014/02/21 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
公司停电通知
2015/04/15 职场文书
2015年防灾减灾工作总结
2015/07/24 职场文书
初中思品教学反思
2016/02/20 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
python入门之算法学习
2021/04/22 Python
奥特曼十大神器:奥特手镯在榜,第一是贝利亚的神器
2022/03/18 日漫
js作用域及作用域链工作引擎
2022/07/07 Javascript