当前位置:七道奇文章资讯网站建设网站编程
日期:2010-06-14 10:26:00  来源:本站整理

在JavaScript中yield实用简便实现方法[网站编程]

赞助商链接



  本文“在JavaScript中yield实用简便实现方法[网站编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

原认为是一个蛮复杂的标题,想了好久没思绪,当然要实现绝对能实现,但假如解析JavaScript脚本或是动态产生代码,都太复杂了.

方才忽然灵机一动,迭代器我们很少会真的直接傻乎乎的next去遍历的,那为什么一定要实现这个傻乎乎的next呢?直接实现each,这样,这样反过来,Yeah,一通百通,不一会儿就写出了第一个超简便版本:

 代码

functionyieldHost(yieldFunction)
{
returnfunction(processer)
{
varyield=function(result)
{
processer(result)
};

yieldFunction(yield);

};
}

 思绪一换,代码真简便.

 先附上例子,然后来谈原理.

首先我们需求一个函数来举行列举,像这样:

functionfun(yield)
{

for(vari=0; i<100; i++)
yield(i);

}

或是这样:

functionfun(yield)
{

yield(
1);
yield(
2);
yield(
3);

}

由于实现方法与C#的差别,所以在循环体内也不用什么yield break或是yield continue这样的语法,直接break或是continue就行了.

然后是实际的应用,yieldHost函数可以将上面的符合要求的fun函数转换为一个列举器:

varenumerator=yieldHost(fun);

这个列举器其实也是一个函数,像jQuery的each函数一样,接纳一个处理函数来处理列举:

enumerator(function(item)
{
window.alert(item);
});

接下来谈谈原理.

关于传统的列举器来说,我们会认为列举器应当在每次调用返回一个值,这就是next办法,但就像陈子瀚说的,这需求在yield的时刻把函数愣住,固然可以实现,但真的很麻烦.

但!事实上我发现,大大都时刻,我们都是用foreach这样的语法来拜候列举器的.这样一来就给了我一个非常讨巧的办法,不实现next办法,而是实现each办法.

each办法和next的办法的辨别在那边呢?熟习jQuery的朋友就会知道,each办法其实可以视为将next倒过来,不是返回列举值,而是接纳一个函数,把列举值当作参数传进去.

恰是这一倒,全部问题都迎刃而解了.我们没有必要去暂停一个函数的履行,只需求将处理列举值的逻辑注到这个函数里面去就完了.所以事实上这里的yieldHost就是完成了一个倒装的工作,把enumerator接纳的那个函数(也就是window.alert( item ),注到了列举函数中(即fun).终究履行的效果就像是这样:

functionfun(yield)
{

window.alert(
1);
window.alert(
2);
window.alert(
3);

}

所以就诞生了这个超简便的实现.

 
  以上是“在JavaScript中yield实用简便实现方法[网站编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 在java中产生切确的行为
  • rtti在java造型前的查抄
  • <b>如安在Java编程中操纵线程</b>
  • cookie技术在Java ME平台的操纵与实现
  • 在Java中操纵VC++组件
  • 在Java中操纵SQLite的教程
  • 在Java中读取写入XML文件(DEMO_004)
  • 在Java操纵程序中成立图象
  • 在Java中操纵Factory Method筹划情势
  • <b>在Java中操纵筹划情势之Singleton</b>
  • <b>在Java中操作UDP</b>
  • 在Java中举行事件处理的办法
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .