js 继承

Function.prototype.method = function(name,func){

    this.prototype[name] = func;

    return this;

}

 

//inherits 为方法名字

//go 为对应要执行的方法

Function.method('inherits',function(parent){

    //这个函数中的this对象就是子对象

    var depth = 0;

    var proto = this.prototype = new parent();

    //给子类定义一个uber的方法

    //返回的结果为ret

    this.method('uber',function uber(name){

        var func;

        var ret;

        var v = parent.prototype;//获取父类型的原型对象

        if(depth){//正数进入

            var d = depth;

            for(var i=d; i>0; i++){

                v = v.constructor.prototype;

            }

            func = v[name];

        }else {

            func = proto[name];

            //如果父类函数和子类函数同名,就调用父类函数

            if(func == this[name]){

                func = v[name];

                //ret = func.apply(parent,Array.prototype.slice.apply(arguments,[1]));

            }

              //这里很有问题

              depth += 1;

                //func的参数:去除数组arguments的(0-1的参数)即是第一个参数

                //执行func

                //ret是结果返回值

                ret = func.apply(this,Array.prototype.slice.apply(arguments,[1]));

                depth -= 1;

                return ret;

        }

    });

    return this;

});

//只继承父函数特定对象的方法 swiss

//参数1是父对象,余下的参数为方法名字

Function.method('swiss',function(){

    var parent = arguments[0];

    for(var i=1; i<arguments.length; i++){

        var name = arguments[i];

        this.prototype[name] = parent.prototype[name];

    }

    return this;

});

 

//以下的是测试数据

 

//父对象

function Person(name,age,sex){

    this.name = name;

    this.age = age;

    this.sex = sex;

}

Person.method('getName',function(){

    return this.name;

});

Person.method('getAge',function(){

    return this.age;

});

Person.method('getSex',function(){

    return this.sex;

});

 

 

//子对象

function User(name,password,age,sex){

    this.name = name;

    this.password = password;

    this.age = age;

    this.sex = sex;

}

User.method('getPassword',function(){

    return this.password;

});

 

//User.method('getName',function(){

  //return "My name is :" + this.uber('getName');

  //return this.name;

//});

//指定继承关系

User.inherits(Person);

//指定只取父对象的方法

User.swiss(Person,"getAge","getSex");

 

//alert(user.uber("getName"));

//alert(user.getName());

 

var p = new Person('Father',10,'boy');

//alert(p.getAge());

var user = new User('xiaobaidddd',123,20,'girl');

//alert(user.uber("getName"));

 

alert(user.getAge());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值