您的位置:首页 > 其它

设计模式知识连载(7)---继承_3:优点结合-组合继承

2017-12-12 16:45 351 查看
<body>

<h3>设计模式知识连载(7)---继承_3:优点结合-组合继承</h3>
<p>
1、在子类构造函数中执行父类构造函数
2、在子类原型上实例化父类
这样就融合了类式继承和构造函数继承的优点,并且过滤了其缺点
</p>

<script type="text/javascript">

/**
*   组合式继承--案例1:
*/
// 声明父类
function SuperClass(name) {
// 值类型共有属性
this.name = name ;

//引用类型共有属性
this.books = ['HTML', 'CSS', 'JavaScript'] ;
}

// 父类原型共有方法
SuperClass.prototype.getName = function() {
console.log(this.name) ;
} ;

// 声明子类
function SubClass(name, time) {
// 构造函数式继承父类name属性
SuperClass.call(this, name) ;

// 子类中新增共有属性
this.time = time ;
} ;

// 类式继承,子类原型继承父类
SubClass.prototype = new SuperClass() ;

// 子类原型方法
SubClass.prototype.getTime = function() {
console.log(this.time) ;
}

var subinstance1 = new SubClass('JavaScript入门', 2017) ;
var subinstance2 = new SubClass('HTML入门', 2016) ;
console.log('subinstance1:', subinstance1) ;
console.log('subinstance2:', subinstance2) ;
subinstance1.getName();
subinstance1.getTime() ;
subinstance2.getName();
subinstance2.getTime() ;

// 验证改变其中一个实例是否会影响到另一个实例
subinstance1.books.push('Java') ;
console.log('subinstance1.books:', subinstance1.books) ;
console.log('subinstance2.books:', subinstance2.books) ;

/**
*   缺陷:
*   在使用构造函数继承时执行了一遍父类的构造函数,
*   而在实现子类原型的类继承时又调用了一遍父类的构造函数,
*   因此父类构造函数调用了两遍
*/
</script>

</body>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式 函数 继承