Ruby's Louvre

每天学习一点点算法

导航

javascript 让实例的方法都异步执行

var C = function(){
    this._methodList = [];
}
C.prototype.fire = function(obj){
    var instance = this;
    while(obj = this._methodList.shift()){
        if(isFinite(obj.fn)){
            var time = new Date;
            instance.timeoutID = setTimeout(function(){
                instance.fire();
                instance._delayTime = new Date - time;
            },obj.fn);
            break;
        }else{
            this._result = obj.fn.apply(instance,obj.args)
        }
    }
}
C.prototype.wait = function(ms){
    this._methodList.push({
        fn:ms
    });
    return this;
}
C.prototype.abort = function(){
    createTimeout(this.timeoutID);
    this.fire();
}
C.extend = function(name,body){
    if(typeof name === "object"){
        for(var i in name){
            if(name[i] !== void 0){
                C.extend(i, name[i])
            }
        }
    }else{
        if(typeof body === "function"){
            var method = C.prototype[name] = function(){
                var obj = {
                    args:arguments,
                    fn:body
                }
                this._methodList.push(obj);
                this.fire();
                return this._result !== void 0 ? this : this;
            }
            method.toString = function(){
                return body+"";
            }
        }else{
            this.prototype[name] = body;
        }
    }
    return this;
}
C.extend({
    aaa:33,
    attr:function(prop){
        return this[prop];
    },
    getName:function(){
        return this.name;
    },
    setName:function(name){
        this.name = name;
    }

});

var c = new C;
console.log(c);
c.attr(aaa);
c.setName("司徒正美").wait(1000).getName();
console.log(c.name);
console.log(c.setName)

posted on 2011-09-13 10:30  司徒正美  阅读(1614)  评论(0编辑  收藏  举报