船长op 发表于 2012-10-24 23:49:09

javascript--类式继承

//类式继承的方法用extedn包装起来    function extend(subs,sups){      //将子类的原型对象改变成 父类的实例对象,这样能过原型链原理,子类的实例对象,就可以找到父类所有公有方法      subs.prototype = new sups();      //子类的constructor属性指向子类的构造函数      subs.prototype.constructor = subs;         //子类的supperClass属性指向父亲的原型对象      subs.supperClass = sups.prototype;      /*如果父类的原型对象改变成自己创建的一个对象,那么父类的constructor就不会指向父类构造函数了,      *那么Reader.supperClass.constructor.call(this,name)这一句就不会执行父类的构造函数,就不能实现继承父类的name属性,      *所以这里需要做一个判断      */      if(sups.prototype.constructor == Object.prototype.constructor)         //将父类的constructor属性指向父类的构造函数      sups.prototype.constructor = sups;      }    //父类    function Person(name){      this.name = name;      }      //父类的公有方法    Person.prototype.getName = {      getName:function(){            return this.name;            }    }      //子类    function Reader(like,name){      /*===Person.call(this,name)====原本应该这样写,但为了不让父类名出现在子类的      *函数中,也就是要解耦合,所以用了下面这个方法,级子类添加了一个supperClass属性,然后在      */      Reader.supperClass.constructor.call(this,name);      this.like = like;    }      /*执行继承,只有在这个执行之后,才能向子类的原型对象中添加子类的公有方法。不然先在子类的原型对象上添加的公有方法,回因为extend(Reader,Person);    这个执行而被复盖(复盖用的不准确,但也不知道其它词了)掉*/    extend(Reader,Person);      //子类的公有方法    Reader.prototype.getLike = function(){      return this.like;      }      //实例化子类    var reader01 = new Reader('books','zj');    console.log(reader01.getLike());    console.log(reader01.getName());
页: [1]
查看完整版本: javascript--类式继承