function extend(subClass,supClass){
Object.setPrototypeOf(subClass.prototype,supClass.prototype);
Object.defineProperties(Object.prototype,{
super:{
value:function(){
supClass.apply(this,arguments);
}
}
})
Object.defineProperties(subClass.prototype,{
superProto:{
value:subClass.prototype
}
})
var names=Reflect.ownKeys(supClass);
for(var i=0;i<names.length;i++){
var desc=Object.getOwnPropertyDescriptor(supClass,names[i]);
Object.defineProperty(subClass.__proto__,names[i],desc);
}
}
function Ball1(name){
this.super(name)
}
Object.defineProperties(Ball1.prototype,{
run:{
value:function(){
}
},
play:{
value:function(){
this.superProto.play.apply(this,arguments);
}
},
constructor:{
value:Ball1
}
})
extend(Ball1,Box1);
var b=new Box("张三");
var b1=new Box1("张三");
console.log(b,b1);
var c=new Ball("张三");
var c1=new Ball1("张三");
console.log(c,c1)
console.dir(Ball1)
console.dir(Ball)