| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3200 人关注过本帖
标题:请教好心人一个js语法问题。
只看楼主 加入收藏
qzstudio
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-5-2
收藏
 问题点数:0 回复次数:1 
请教好心人一个js语法问题。
大家好,请教一个JavaScript的语法问题。
下面这些代码有点儿多,但是我怕说不明白问题,所以都贴出来了,麻烦好心人帮看看。
这是《WebGL入门指南》里面作者写的一个Sim框架的代码。
其中
Sim.Publisher.prototype.subscribe里面的这两行代码我感到迷惑:
var subscribers = this.messageTypes[message];
subscribers.push({ subscriber : subscriber, callback : callback });
既然后面用了push,是不是说明subscribers是个数组,但是如果这个方法被反复执行,那么前面的subscribers的内容岂不是被反复覆盖的,那数组里面是不是总是只有一个元素。这有什么意义?但是后面还有Sim.Publisher.prototype.findSubscriber这个方法,需要遍历subscribers,显然里面不应该是一个元素。蒙圈了,求好心人解惑。
程序代码:
Sim = {};
Sim.Publisher = function() {
    this.messageTypes = {};
}
Sim.Publisher.prototype.subscribe = function(message, subscriber, callback) {
    var subscribers = this.messageTypes[message];
    if (subscribers)
    {
        if (this.findSubscriber(subscribers, subscriber) != -1) return;
    }
    else
    {
        subscribers = [];
        this.messageTypes[message] = subscribers;
    }
    subscribers.push({ subscriber : subscriber, callback : callback });
}
Sim.Publisher.prototype.unsubscribe =  function(message, subscriber, callback) {
    if (subscriber)
    {
        var subscribers = this.messageTypes[message];
        if (subscribers)
        {
            var i = this.findSubscriber(subscribers, subscriber, callback);
            if (i != -1) this.messageTypes[message].splice(i, 1);
        }
    }
    else
        delete this.messageTypes[message];
}

Sim.Publisher.prototype.publish = function(message) {
    var subscribers = this.messageTypes[message];
    if (subscribers)
    {
        for (var i = 0; i < subscribers.length; i++)
        {
            var args = [];
            for (var j = 0; j < arguments.length - 1; j++)
                args.push(arguments[j + 1]);
            subscribers[i].callback.apply(subscribers[i].subscriber, args);
        }
    }
}

Sim.Publisher.prototype.findSubscriber = function (subscribers, subscriber) {
    for (var i = 0; i < subscribers.length; i++)
        if (subscribers[i] == subscriber)return i;
    return -1;
}
2016-05-02 22:31
linuxpluto
Rank: 4
等 级:贵宾
威 望:13
帖 子:889
专家分:23
注 册:2005-8-14
收藏
得分:0 
push是数组尾部追加一个元素,数组长度自动加1
对应的方法shift(),从头部获取一个元素,并且数组删除了这个元素,数组长度减1

数据结构这个叫队列,FIFO,先进先出队列。。

吃的比猪还差,干的比驴还累,起的比鸡还早,睡得比小姐还晚,挣得比民工还少,看起来比谁都好——苦命的人.人生短短几十年,不要给自己留下了什么遗憾,想笑就笑,想哭就哭,该爱的时候就去爱,无谓压抑自己
2016-05-06 15:33
快速回复:请教好心人一个js语法问题。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015233 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved