abp-159,js最理想的继承——寄生组合式继承

 // 基于已有对象创建新对象,等于对传入的对象进行了一次浅复制
 function duplicate(obj){
  var f = function(){};
  f.prototype = obj;
  return new f();
 }

 // 继承原型
 function extend(target, obj){
  var proto = duplicate(obj.prototype);
  proto.constructor = target;
  target.prototype = proto;
 }

 // 超类
 function SuperClass(prop){
  this.property = prop;
  this.colors = ['red', 'blue', 'green'];
 }

 // 超类方法
 SuperClass.prototype.get_super_value = function(){
  return this.property;
 }

 // 子类
 function SubClass(prop, sub_prop){
  //继承超类
  SuperClass.call(this, prop);
  this.sub_property = sub_prop;
 }

 // 继承超类的原型
 extend(SubClass, SuperClass);

 //子类方法
 SubClass.prototype.get_sub_value = function(){
  return this.sub_property;
 };

 var instance1 = new SubClass(true, false);
 var instance2 = new SubClass(true, false);

 instance1.colors.push('black');

 alert(instance1.colors); // red,blue,green,black
 alert(instance2.colors); //red,blue,green

 alert(instance1 instanceof SubClass); // true
 alert(instance1 instanceof SuperClass); // true

posted @ 2018-06-22 13:37  onebyck  阅读(8728)  评论(0编辑  收藏  举报