js设计模式----Behavioral Patterns之Iterator(4)

class KingSuccession {
    constructor(inLineForThrone){
        this.inLineForThrone = inLineForThrone;
        this.pointer = 0;
    }
    next(){
        return this.inLineForThrone[this.pointer++];
    }
}
var kin = new KingSuccession(["Robert Baratheon","JofferyBaratheon","TommenBaratheon"]);
kin.next();
kin.next();
kin.next();

An interesting application of iterators is to not iterate over a fixed collection. For
instance an iterator can be used to generate sequential members of an infinite set
like the fibonacci sequence:

class FibonacciIterator{
    constructor(){
        this.previous = 1;
        this.beforePrevious = 1;
    }
    next(){
        var current = this.previous + this.beforePrevious;
        this.beforePrevious = this.previous;
        this.previous = current;
        return current;
    }
}
var fib = new FibonacciIterator();
fib.next();
fib.next();
fib.next();

Iterators are a syntactic nicety that has long been missing from JavaScript. Another
great feature of ECMAScript-2015 are generators. This is, in effect, a built in iterator
factory. Our fibonacci sequence could be rewritten like the following:

function* FibonacciGenerator () {
    var previous = 1;
    var beforePrevious = 1;
    while (true){
        var current = previous + beforePrevious;
        beforePrevious = previous;
        previous = current;
        yield  current;
    }
}
var fibo = new FibonacciGenerator();
fibo.next().value;
fibo.next().value;
fibo.next().value;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值