class.js

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(o).forEach(function(k){
                fn.prototype[k] = o[k];
            });
            return fn;
    };
    
    // 静态方法
    fn.statics = function(o){
        Object.keys(o).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(name){
    Animal.call(this,name);
});

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

转载于:https://my.oschina.net/bosscheng/blog/523231

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值