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());