老笔记了,存在电脑里忘记发
组合式继承
组合 就是两方面都各做一次,缺点是 所谓"两次执行"父类的构造函数
第一次是new实例化 用于创建子类的原型对象 目的是共享方法
第二次是单纯执行 用于将父类的属性赋予子类的实例 目的是拥有属性
父类构造函数 可想象为 形如this.key = val
,
let parent = function(name) {
// 父类型的自有属性
this.name = name;
this.hobbies = ['tennis','music','photography']
}
而子类构造函数除了往this上添加属性外,还通过call让自己的this执行父类构造函数 把父类属性加到自己身上
let son = function(name,sex) {
//构造函数式继承父类属性,这里是第二次调用父类构造函数
parent.call(this, name);
// 添加子类自己的私有属性
this.sex = sex;
}
在new子类构造函数得到子类实例之前,为了共享原型方法,需要得到一个父类实例 作为子类原型对象
son.prototype = new parent();
这是首次调用父类构造函数 作为子类原型对象;
son.prototype.constructor = son;
并且让这个