// 混合继承的缺点: 3件事 : 继承了父类的2次模版 , 继承了一次父类的原型对象
// extend方法 2件事: 继承1次父类的模版 继承一次父类的原型对象
//1:子类,2:父类
function extend(sub,sup){
//目的:实现只继承父类的原型对象
var F = new Function(); //创建一个空函数,目的是进行中转
F.prototype = sup.prototype; //实现空函数的原型对象和父类的原型对象转换
sub.prototype = new F(); //子类原型对象原型进程
sub.prototype.constructor = sub; //还原子类的构造器
//保存一下父类的原型对象,一方面方便解耦,另一方面方便获得父类的原型对象
sub.superClass = sup.prototype; //自定义一个子类的静态属性,接受父类的原型对象
//判断父类原型的构造器
if (sup.prototype.constructor == Object.prototype.constructor) {
sup.prototype.constructor = sup;
}
}
function Person(name,age){
this.name = name;
this.age = age;
}
Person.prototype = {
constructor : Person,
sayHello : function(){
console.log('sayHello');
}
}
function Boy(name,age,sex){
Boy.superClass.constructor.call(this,name,age);
this.sex = sex;
}
//原型的继承方式:即继承了父类的模板,有继承了父类的原型对象
//Boy.prototype = new Person();
//只继承一次父类的原型对象
extend(Boy,Person);
//给子类添加一个原型对象的方法
Boy.prototype.sayHello = function(){
console.log('Hello javascript');
}
var b = new Boy('z3',20,'男');
console.log(b.name);
console.log(b.age);
console.log(b.sex);
Boy.superClass.sayHello.call(b);
经典继承方法实现(模拟extjs底层继承机制)
最新推荐文章于 2020-05-28 16:13:12 发布