首页 > Web开发 > 详细

class.js

时间:2015-10-28 17:32:22      阅读:189      评论:0      收藏:0      [点我收藏+]
function _inheritPrototype(subType,superType){
    var prototype = Object.create(superType.prototype);  // 复制原型链
    prototype.constructor = subType;  // 设置 constructor 为自己 
    subType.prototype = prototype; //  设置 prototype 的值。
    
    Object.keys(superType).forEach(function(k){
        subType[k] = superType[k];
    });
}


function _wrap(fn){
    // 继承实现。 
    fn.extend = function(sub){
        _inheritPrototype(sub,fn);
        return wrap(fn);
    };
    
    // 原型链方法。
    fn.methods = function(o){
        Object.keys(sub).forEach(function(k){
                fn.prototype[k] = o[k];
            });
            return fn;
    };
    
    // 静态方法
    fn.statics = function(o){
        Object.keys(sub).forEach(function(k){
                fn[k] = o[k];
            });
            return fn;
    };

    return fn;
}

function Klass(fn){
    return _wrap(fn || function(){});
}

Klass.extend = _inheritPrototype;


// test

var Animal = Klass(function(name){
    this.name = name;
}).methods({
    talk:function(){
        return ‘i am‘+ this.name;
    }
});

var Bird = Animal.extend(function(){
    Animal.call(this,call);
});

Bird.methods({
    fly:function(){
        return ‘i am flying ‘;
    }
})


var bird = new Bird(‘bird‘);

console.log(bird.talk()); // i am bird
console.log(bird.fly());// i am flying

    ths: https://github.com/aralejs/class/issues/15

class.js

原文:http://my.oschina.net/bosscheng/blog/523231

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!