网络编程
位置:首页>> 网络编程>> JavaScript>> JavaScript 组件之旅(二):编码实现和算法(2)

JavaScript 组件之旅(二):编码实现和算法(2)

作者:太伯 来源:alipay UED 发布时间:2009-10-09 14:24:00 

标签:组件,JavaScript,编码,算法

经典的 JavaScript 对象三段式是什么?

  1. 定义对象的构造函数

  2. 在原型上定义属性和方法

  3. new 对象,拿来用

所以,下面要为 SmartQueue.Task 对象的原型定义属性和方法。上期分析过 Task (任务)有几个属性和方法,部分属性我们已经在 _setupTask 中定义了,下面是原型提供的属性和方法:


    T.prototype = {
        enabled: true,
        register: function() {
            var queue = Q[this.level];
            if(_findTask(queue, this.name) !== -1) {
                throw new Error('Specified name exists: ' + this.name);
            }
            queue.push(this);
        },
        changeTo: function(level) {
            if(!_validateLevel(level)) {
                throw new Error('Invalid argument: level');
            }
            level = parseInt(level, 10);
            if(this.level === level) {
                return;
            }
            Q[this.level].remove(this);
            this.level = level;
            this.register();
        },
        execute: function() {
            if(this.enabled) {
                // pass context and data
                this.fn.call(this.context, this.data);
            }
        },
        toString: function() {
            var str = this.name;
            if(this.dependencies.length) {
                str += ' depends on: [' + this.dependencies.join(', ') + ']';
            }
            return str;
        }
    };

如你所见,逻辑非常简单,也许你已经在一分钟内扫过了代码,嘴角不经意间露出一丝心领神会。不过,这里要说的是简单而且通常最不被重视的 toString 方法。在一些高级语言中,为自定义对象实现 toString 方法被作为最佳实践准则而推荐,为什么呢?因为 toString 可以很方便地在调试器中提供有用的信息,可以方便地将对象基本信息写入日志;在统一的编程模式中,实现 toString 可以让你少写一些代码。

嗯,我们继续推进,我们要实现 SmartQueue 的具体功能。上期分析过,SmartQueue 只有一个实例,因此我们决定直接在 SmartQueue 下面创建方法:


    SmartQueue.init = function() {
        Q.forEach(function(queue) {
            queue.length = 0;
        });
    };

这里用到 JavaScript 1.6 为 Array 对象提供的遍历方法 forEach. 之所以这样写是因为我们假定“外部代码”已经在前面运行过了。设置 Array 对象的 length 属性为 0 导致,它被清空并且释放所有的项(数组单元)。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com