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]