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 相关文章推荐
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
Dec 02 Javascript
JavaScript小技巧 2.5 则
Sep 12 Javascript
分享一个asp.net pager分页控件
Jan 04 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
Dec 12 Javascript
js实现飞入星星特效代码
Oct 17 Javascript
JavaScript Function函数类型介绍
Apr 08 Javascript
js定义类的几种方法(推荐)
Jun 08 Javascript
JavaScript实现图片轮播组件代码示例
Nov 22 Javascript
微信小程序对接七牛云存储的方法
Jul 30 Javascript
微信小程序开发教程之增加mixin扩展
Aug 09 Javascript
Vue.js点击切换按钮改变内容的实例讲解
Aug 22 Javascript
解决layui使用layui-icon出现默认图标的问题
Sep 11 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设计模式之命令模式使用示例
2014/03/02 PHP
PHP与MYSQL中UTF8 中文排序示例代码
2014/10/23 PHP
PHP传参之传值与传址的区别
2015/04/24 PHP
10个超级有用的PHP代码片段果断收藏
2015/09/23 PHP
PHP结合Ueditor并修改图片上传路径
2016/10/16 PHP
基于php伪静态的实现方法解析
2020/07/31 PHP
jquery.ui.progressbar 中文文档
2009/11/26 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
2013/10/23 Javascript
批量修改标签css样式以input标签为例
2014/07/31 Javascript
jQuery Easyui实现左右布局
2016/01/26 Javascript
jquery实现简单Tab切换菜单效果
2020/07/17 Javascript
js实现简单的碰壁反弹效果
2016/08/30 Javascript
Vue.js每天必学之过渡与动画
2016/09/06 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
2017/03/13 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
package.json配置文件构成详解
2019/08/27 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
vue实现移动端图片上传功能
2019/12/23 Javascript
Vue中的this.$options.data()和this.$data用法说明
2020/07/26 Javascript
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python使用opencv进行人脸识别
2017/04/07 Python
Python抓取框架Scrapy爬虫入门:页面提取
2017/12/01 Python
使用TensorFlow实现SVM
2018/09/06 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
2019/05/04 Python
selenium获取当前页面的url、源码、title的方法
2019/06/12 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
python简单实现9宫格图片实例
2020/09/03 Python
利用HTML5画出一个坦克的形状具体实现代码
2013/06/20 HTML / CSS
初中生散播谣言检讨书
2014/11/17 职场文书
文艺部部长竞选稿
2015/11/21 职场文书
大学生创业计划书
2019/06/24 职场文书
如何用PHP实现分布算法之一致性哈希算法
2021/05/26 PHP